/*****************************************************************************
 * Copyright (c) 2014-2024 OpenRCT2 developers
 *
 * For a complete list of all authors, please refer to contributors.md
 * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
 *
 * OpenRCT2 is licensed under the GNU General Public License version 3.
 *****************************************************************************/

#include "TrackData.h"

#include "../localisation/StringIds.h"
#include "Track.h"
#include "TrackPaint.h"

#include <cstdint>
#include <iterator>

using namespace OpenRCT2;

namespace OpenRCT2::TrackMetaData
{
    // clang-format off
    static constexpr TrackCoordinates _trackCoordinates[] = {
            { 0, 0, 0, 0, 0, 0 },       // ELEM_FLAT
            { 0, 0, 0, 0, 0, 0 },       // ELEM_END_STATION
            { 0, 0, 0, 0, 0, 0 },       // ELEM_BEGIN_STATION
            { 0, 0, 0, 0, 0, 0 },       // ELEM_MIDDLE_STATION
            { 0, 0, 0, 16, 0, 0 },      // ELEM_25_DEG_UP
            { 0, 0, 0, 64, 0, 0 },      // ELEM_60_DEG_UP
            { 0, 0, 0, 8, 0, 0 },       // ELEM_FLAT_TO_25_DEG_UP
            { 0, 0, 0, 32, 0, 0 },      // ELEM_25_DEG_UP_TO_60_DEG_UP
            { 0, 0, 0, 32, 0, 0 },      // ELEM_60_DEG_UP_TO_25_DEG_UP
            { 0, 0, 0, 8, 0, 0 },       // ELEM_25_DEG_UP_TO_FLAT
            { 0, 0, 16, 0, 0, 0 },      // ELEM_25_DEG_DOWN
            { 0, 0, 64, 0, 0, 0 },      // ELEM_60_DEG_DOWN
            { 0, 0, 8, 0, 0, 0 },       // ELEM_FLAT_TO_25_DEG_DOWN
            { 0, 0, 32, 0, 0, 0 },      // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN
            { 0, 0, 32, 0, 0, 0 },      // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN
            { 0, 0, 8, 0, 0, 0 },       // ELEM_25_DEG_DOWN_TO_FLAT
            { 0, 3, 0, 0, -64, -64 },   // ELEM_LEFT_QUARTER_TURN_5_TILES
            { 0, 1, 0, 0, -64, 64 },    // ELEM_RIGHT_QUARTER_TURN_5_TILES
            { 0, 0, 0, 0, 0, 0 },       // ELEM_FLAT_TO_LEFT_BANK
            { 0, 0, 0, 0, 0, 0 },       // ELEM_FLAT_TO_RIGHT_BANK
            { 0, 0, 0, 0, 0, 0 },       // ELEM_LEFT_BANK_TO_FLAT
            { 0, 0, 0, 0, 0, 0 },       // ELEM_RIGHT_BANK_TO_FLAT
            { 0, 3, 0, 0, -64, -64 },   // ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES
            { 0, 1, 0, 0, -64, 64 },    // ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES
            { 0, 0, 0, 8, 0, 0 },       // ELEM_LEFT_BANK_TO_25_DEG_UP
            { 0, 0, 0, 8, 0, 0 },       // ELEM_RIGHT_BANK_TO_25_DEG_UP
            { 0, 0, 0, 8, 0, 0 },       // ELEM_25_DEG_UP_TO_LEFT_BANK
            { 0, 0, 0, 8, 0, 0 },       // ELEM_25_DEG_UP_TO_RIGHT_BANK
            { 0, 0, 8, 0, 0, 0 },       // ELEM_LEFT_BANK_TO_25_DEG_DOWN
            { 0, 0, 8, 0, 0, 0 },       // ELEM_RIGHT_BANK_TO_25_DEG_DOWN
            { 0, 0, 8, 0, 0, 0 },       // ELEM_25_DEG_DOWN_TO_LEFT_BANK
            { 0, 0, 8, 0, 0, 0 },       // ELEM_25_DEG_DOWN_TO_RIGHT_BANK
            { 0, 0, 0, 0, 0, 0 },       // ELEM_LEFT_BANK
            { 0, 0, 0, 0, 0, 0 },       // ELEM_RIGHT_BANK
            { 0, 3, 0, 64, -64, -64 },  // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP
            { 0, 1, 0, 64, -64, 64 },   // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP
            { 0, 3, 64, 0, -64, -64 },  // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN
            { 0, 1, 64, 0, -64, 64 },   // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN
            { 0, 0, 0, 0, -64, -32 },   // ELEM_S_BEND_LEFT
            { 0, 0, 0, 0, -64, 32 },    // ELEM_S_BEND_RIGHT
            { 0, 0, 0, 0, -32, -32 },   // ELEM_LEFT_VERTICAL_LOOP
            { 0, 0, 0, 0, -32, 32 },    // ELEM_RIGHT_VERTICAL_LOOP
            { 0, 3, 0, 0, -32, -32 },   // ELEM_LEFT_QUARTER_TURN_3_TILES
            { 0, 1, 0, 0, -32, 32 },    // ELEM_RIGHT_QUARTER_TURN_3_TILES
            { 0, 3, 0, 0, -32, -32 },   // ELEM_LEFT_QUARTER_TURN_3_TILES_BANK
            { 0, 1, 0, 0, -32, 32 },    // ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK
            { 0, 3, 0, 32, -32, -32 },  // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP
            { 0, 1, 0, 32, -32, 32 },   // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP
            { 0, 3, 32, 0, -32, -32 },  // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN
            { 0, 1, 32, 0, -32, 32 },   // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN
            { 0, 3, 0, 0, 0, 0 },       // ELEM_LEFT_QUARTER_TURN_1_TILE
            { 0, 1, 0, 0, 0, 0 },       // ELEM_RIGHT_QUARTER_TURN_1_TILE
            { 0, 0, 0, 16, -64, 0 },    // ELEM_LEFT_TWIST_DOWN_TO_UP
            { 0, 0, 0, 16, -64, 0 },    // ELEM_RIGHT_TWIST_DOWN_TO_UP
            { 0, 0, 0, -16, -64, 0 },   // ELEM_LEFT_TWIST_UP_TO_DOWN
            { 0, 0, 0, -16, -64, 0 },   // ELEM_RIGHT_TWIST_UP_TO_DOWN
            { 0, 2, 0, 152, -32, 0 },   // ELEM_HALF_LOOP_UP
            { 0, 2, 0, -152, 32, 0 },   // ELEM_HALF_LOOP_DOWN
            { 0, 3, 0, 80, -32, -32 },  // ELEM_LEFT_CORKSCREW_UP
            { 0, 1, 0, 80, -32, 32 },   // ELEM_RIGHT_CORKSCREW_UP
            { 0, 3, 0, -80, -32, -32 }, // ELEM_LEFT_CORKSCREW_DOWN
            { 0, 1, 0, -80, -32, 32 },  // ELEM_RIGHT_CORKSCREW_DOWN
            { 0, 0, 0, 24, 0, 0 },      // ELEM_FLAT_TO_60_DEG_UP
            { 0, 0, 0, 24, 0, 0 },      // ELEM_60_DEG_UP_TO_FLAT
            { 0, 0, 24, 0, 0, 0 },      // ELEM_FLAT_TO_60_DEG_DOWN
            { 0, 0, 24, 0, 0, 0 },      // ELEM_60_DEG_DOWN_TO_FLAT
            { 0, 0, 0, 96, 32, 0 },     // ELEM_TOWER_BASE
            { 0, 0, 0, 32, 32, 0 },     // ELEM_TOWER_SECTION
            { 0, 0, 0, 0, 0, 0 },       // ELEM_FLAT_COVERED
            { 0, 0, 0, 16, 0, 0 },      // ELEM_25_DEG_UP_COVERED
            { 0, 0, 0, 64, 0, 0 },      // ELEM_60_DEG_UP_COVERED
            { 0, 0, 0, 8, 0, 0 },       // ELEM_FLAT_TO_25_DEG_UP_COVERED
            { 0, 0, 0, 32, 0, 0 },      // ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED
            { 0, 0, 0, 32, 0, 0 },      // ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED
            { 0, 0, 0, 8, 0, 0 },       // ELEM_25_DEG_UP_TO_FLAT_COVERED
            { 0, 0, 16, 0, 0, 0 },      // ELEM_25_DEG_DOWN_COVERED
            { 0, 0, 64, 0, 0, 0 },      // ELEM_60_DEG_DOWN_COVERED
            { 0, 0, 8, 0, 0, 0 },       // ELEM_FLAT_TO_25_DEG_DOWN_COVERED
            { 0, 0, 32, 0, 0, 0 },      // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED
            { 0, 0, 32, 0, 0, 0 },      // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED
            { 0, 0, 8, 0, 0, 0 },       // ELEM_25_DEG_DOWN_TO_FLAT_COVERED
            { 0, 3, 0, 0, -64, -64 },   // ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED
            { 0, 1, 0, 0, -64, 64 },    // ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED
            { 0, 0, 0, 0, -64, -32 },   // ELEM_S_BEND_LEFT_COVERED
            { 0, 0, 0, 0, -64, 32 },    // ELEM_S_BEND_RIGHT_COVERED
            { 0, 3, 0, 0, -32, -32 },   // ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED
            { 0, 1, 0, 0, -32, 32 },    // ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED
            { 0, 2, 0, 16, 0, -96 },    // ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL
            { 0, 2, 0, 16, 0, 96 },     // ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL
            { 0, 2, 16, 0, 0, -96 },    // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL
            { 0, 2, 16, 0, 0, 96 },     // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL
            { 0, 2, 0, 16, 0, -160 },   // ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE
            { 0, 2, 0, 16, 0, 160 },    // ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE
            { 0, 2, 16, 0, 0, -160 },   // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE
            { 0, 2, 16, 0, 0, 160 },    // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE
            { 0, 3, 0, 64, 0, 0 },      // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_UP
            { 0, 1, 0, 64, 0, 0 },      // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP
            { 0, 3, 64, 0, 0, 0 },      // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN
            { 0, 1, 64, 0, 0, 0 },      // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN
            { 0, 0, 0, 0, 0, 0 },       // ELEM_BRAKES
            { 0, 0, 0, 0, 0, 0 },       // ELEM_ROTATION_CONTROL_TOGGLE
            { 0, 0, 0, 0, 0, 0 },       // ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP
            { 0, 3, 0, 16, -64, -64 },  // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP
            { 0, 1, 0, 16, -64, 64 },   // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP
            { 0, 3, 16, 0, -64, -64 },  // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN
            { 0, 1, 16, 0, -64, 64 },   // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN
            { 0, 3, 0, 16, -64, -64 },  // ELEM_LEFT_QUARTER_HELIX_LARGE_UP
            { 0, 1, 0, 16, -64, 64 },   // ELEM_RIGHT_QUARTER_HELIX_LARGE_UP
            { 0, 3, 16, 0, -64, -64 },  // ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN
            { 0, 1, 16, 0, -64, 64 },   // ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN
            { 0, 0, 0, 16, 0, 0 },      // ELEM_25_DEG_UP_LEFT_BANKED
            { 0, 0, 0, 16, 0, 0 },      // ELEM_25_DEG_UP_RIGHT_BANKED
            { 0, 0, 0, 0, 0, 0 },       // ELEM_WATERFALL
            { 0, 0, 0, 0, 0, 0 },       // ELEM_RAPIDS
            { 0, 0, 0, 0, 0, 0 },       // ELEM_ON_RIDE_PHOTO
            { 0, 0, 16, 0, 0, 0 },      // ELEM_25_DEG_DOWN_LEFT_BANKED
            { 0, 0, 16, 0, 0, 0 },      // ELEM_25_DEG_DOWN_RIGHT_BANKED
            { 0, 0, 16, 16, -128, 0 },  // ELEM_WATER_SPLASH
            { 0, 0, 0, 88, -96, 0 },    // ELEM_FLAT_TO_60_DEG_UP_LONG_BASE
            { 0, 0, 0, 88, -96, 0 },    // ELEM_60_DEG_UP_TO_FLAT_LONG_BASE
            { 0, 0, 0, 0, 0, 0 },       // ELEM_WHIRLPOOL
            { 0, 0, 88, 0, -96, 0 },    // ELEM_60_DEG_DOWN_TO_FLAT_LONG_BASE
            { 0, 0, 88, 0, -96, 0 },    // ELEM_FLAT_TO_60_DEG_DOWN_LONG_BASE
            { 0, 0, 0, -96, -96, 0 },   // ELEM_CABLE_LIFT_HILL
            { 0, 0, 0, 240, -160, 0 },  // ELEM_REVERSE_FREEFALL_SLOPE
            { 0, 0, 0, 80, 32, 0 },     // ELEM_REVERSE_FREEFALL_VERTICAL
            { 0, 0, 0, 32, 32, 0 },     // ELEM_90_DEG_UP
            { 0, 0, 32, 0, 32, 0 },     // ELEM_90_DEG_DOWN
            { 0, 0, 0, 56, 32, 0 },     // ELEM_60_DEG_UP_TO_90_DEG_UP
            { 0, 0, 56, 0, 0, 0 },      // ELEM_90_DEG_DOWN_TO_60_DEG_DOWN
            { 0, 0, 0, 56, 0, 0 },      // ELEM_90_DEG_UP_TO_60_DEG_UP
            { 0, 0, 56, 0, 32, 0 },     // ELEM_60_DEG_DOWN_TO_90_DEG_DOWN
            { 0, 0, 24, 0, 0, 0 },      // ELEM_BRAKE_FOR_DROP
            { 0, 7, 0, 0, -64, -32 },   // ELEM_LEFT_EIGHTH_TO_DIAG
            { 0, 4, 0, 0, -64, 32 },    // ELEM_RIGHT_EIGHTH_TO_DIAG
            { 4, 0, 0, 0, -64, 32 },    // ELEM_LEFT_EIGHTH_TO_ORTHOGONAL
            { 4, 1, 0, 0, -32, 64 },    // ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL
            { 0, 7, 0, 0, -64, -32 },   // ELEM_LEFT_EIGHTH_BANK_TO_DIAG
            { 0, 4, 0, 0, -64, 32 },    // ELEM_RIGHT_EIGHTH_BANK_TO_DIAG
            { 4, 0, 0, 0, -64, 32 },    // ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL
            { 4, 1, 0, 0, -32, 64 },    // ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL
            { 4, 4, 0, 0, -32, 32 },    // ELEM_DIAG_FLAT
            { 4, 4, 0, 16, -32, 32 },   // ELEM_DIAG_25_DEG_UP
            { 4, 4, 0, 64, -32, 32 },   // ELEM_DIAG_60_DEG_UP
            { 4, 4, 0, 8, -32, 32 },    // ELEM_DIAG_FLAT_TO_25_DEG_UP
            { 4, 4, 0, 32, -32, 32 },   // ELEM_DIAG_25_DEG_UP_TO_60_DEG_UP
            { 4, 4, 0, 32, -32, 32 },   // ELEM_DIAG_60_DEG_UP_TO_25_DEG_UP
            { 4, 4, 0, 8, -32, 32 },    // ELEM_DIAG_25_DEG_UP_TO_FLAT
            { 4, 4, 16, 0, -32, 32 },   // ELEM_DIAG_25_DEG_DOWN
            { 4, 4, 64, 0, -32, 32 },   // ELEM_DIAG_60_DEG_DOWN
            { 4, 4, 8, 0, -32, 32 },    // ELEM_DIAG_FLAT_TO_25_DEG_DOWN
            { 4, 4, 32, 0, -32, 32 },   // ELEM_DIAG_25_DEG_DOWN_TO_60_DEG_DOWN
            { 4, 4, 32, 0, -32, 32 },   // ELEM_DIAG_60_DEG_DOWN_TO_25_DEG_DOWN
            { 4, 4, 8, 0, -32, 32 },    // ELEM_DIAG_25_DEG_DOWN_TO_FLAT
            { 4, 4, 0, 24, -32, 32 },   // ELEM_DIAG_FLAT_TO_60_DEG_UP
            { 4, 4, 0, 24, -32, 32 },   // ELEM_DIAG_60_DEG_UP_TO_FLAT
            { 4, 4, 24, 0, -32, 32 },   // ELEM_DIAG_FLAT_TO_60_DEG_DOWN
            { 4, 4, 24, 0, -32, 32 },   // ELEM_DIAG_60_DEG_DOWN_TO_FLAT
            { 4, 4, 0, 0, -32, 32 },    // ELEM_DIAG_FLAT_TO_LEFT_BANK
            { 4, 4, 0, 0, -32, 32 },    // ELEM_DIAG_FLAT_TO_RIGHT_BANK
            { 4, 4, 0, 0, -32, 32 },    // ELEM_DIAG_LEFT_BANK_TO_FLAT
            { 4, 4, 0, 0, -32, 32 },    // ELEM_DIAG_RIGHT_BANK_TO_FLAT
            { 4, 4, 0, 8, -32, 32 },    // ELEM_DIAG_LEFT_BANK_TO_25_DEG_UP
            { 4, 4, 0, 8, -32, 32 },    // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_UP
            { 4, 4, 0, 8, -32, 32 },    // ELEM_DIAG_25_DEG_UP_TO_LEFT_BANK
            { 4, 4, 0, 8, -32, 32 },    // ELEM_DIAG_25_DEG_UP_TO_RIGHT_BANK
            { 4, 4, 8, 0, -32, 32 },    // ELEM_DIAG_LEFT_BANK_TO_25_DEG_DOWN
            { 4, 4, 8, 0, -32, 32 },    // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_DOWN
            { 4, 4, 8, 0, -32, 32 },    // ELEM_DIAG_25_DEG_DOWN_TO_LEFT_BANK
            { 4, 4, 8, 0, -32, 32 },    // ELEM_DIAG_25_DEG_DOWN_TO_RIGHT_BANK
            { 4, 4, 0, 0, -32, 32 },    // ELEM_DIAG_LEFT_BANK
            { 4, 4, 0, 0, -32, 32 },    // ELEM_DIAG_RIGHT_BANK
            { 0, 0, 0, 0, 0, 0 },       // ELEM_LOG_FLUME_REVERSER
            { 0, 0, 0, 0, 0, 0 },       // ELEM_SPINNING_TUNNEL
            { 0, 0, 0, 32, -64, 0 },    // ELEM_LEFT_BARREL_ROLL_UP_TO_DOWN
            { 0, 0, 0, 32, -64, 0 },    // ELEM_RIGHT_BARREL_ROLL_UP_TO_DOWN
            { 0, 0, 0, -32, -64, 0 },   // ELEM_LEFT_BARREL_ROLL_DOWN_TO_UP
            { 0, 0, 0, -32, -64, 0 },   // ELEM_RIGHT_BARREL_ROLL_DOWN_TO_UP
            { 0, 3, 0, 24, -32, -32 },  // ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP
            { 0, 1, 0, 24, -32, 32 },   // ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP
            { 0, 3, 24, 0, -32, -32 },  // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK
            { 0, 1, 24, 0, -32, 32 },   // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_RIGHT_BANK
            { 0, 0, 0, 16, 0, 0 },      // ELEM_POWERED_LIFT
            { 0, 2, 0, 280, -64, -32 }, // ELEM_LEFT_LARGE_HALF_LOOP_UP
            { 0, 2, 0, 280, -64, 32 },  // ELEM_RIGHT_LARGE_HALF_LOOP_UP
            { 0, 2, 0, -280, 64, -32 }, // ELEM_RIGHT_LARGE_HALF_LOOP_DOWN
            { 0, 2, 0, -280, 64, 32 },  // ELEM_LEFT_LARGE_HALF_LOOP_DOWN
            { 0, 0, 0, -16, -64, 0 },   // ELEM_LEFT_FLYER_TWIST_UP_TO_DOWN
            { 0, 0, 0, -16, -64, 0 },   // ELEM_RIGHT_FLYER_TWIST_UP_TO_DOWN
            { 0, 0, 0, 16, -64, 0 },    // ELEM_LEFT_FLYER_TWIST_DOWN_TO_UP
            { 0, 0, 0, 16, -64, 0 },    // ELEM_RIGHT_FLYER_TWIST_DOWN_TO_UP
            { 0, 2, 0, 120, -32, 0 },   // ELEM_FLYER_HALF_LOOP_UP
            { 0, 2, 0, -120, 32, 0 },   // ELEM_FLYER_HALF_LOOP_DOWN
            { 0, 3, 0, 48, -32, -32 },  // ELEM_LEFT_FLY_CORKSCREW_UP_TO_DOWN
            { 0, 1, 0, 48, -32, 32 },   // ELEM_RIGHT_FLY_CORKSCREW_UP_TO_DOWN
            { 0, 3, 0, -48, -32, -32 }, // ELEM_LEFT_FLY_CORKSCREW_DOWN_TO_UP
            { 0, 1, 0, -48, -32, 32 },  // ELEM_RIGHT_FLY_CORKSCREW_DOWN_TO_UP
            { 0, 2, 0, 32, 0, 0 },      // ELEM_HEARTLINE_TRANSFER_UP
            { 0, 2, 0, -32, 0, 0 },     // ELEM_HEARTLINE_TRANSFER_DOWN
            { 0, 0, 0, 0, -160, 0 },    // ELEM_LEFT_HEARTLINE_ROLL
            { 0, 0, 0, 0, -160, 0 },    // ELEM_RIGHT_HEARTLINE_ROLL
            { 0, 0, 0, 0, -32, 0 },     // ELEM_MINI_GOLF_HOLE_A
            { 0, 0, 0, 0, -32, 0 },     // ELEM_MINI_GOLF_HOLE_B
            { 0, 0, 0, 0, -32, 0 },     // ELEM_MINI_GOLF_HOLE_C
            { 0, 1, 0, 0, -32, 32 },    // ELEM_MINI_GOLF_HOLE_D
            { 0, 3, 0, 0, -32, -32 },   // ELEM_MINI_GOLF_HOLE_E
            { 0, 2, 0, -96, -96, 0 },   // ELEM_INVERTED_FLAT_TO_90_DEG_DOWN_QUARTER_LOOP
            { 0, 2, 0, 128, 64, 0 },    // ELEM_90_DEG_UP_QUARTER_LOOP_TO_INVERTED
            { 0, 2, 0, -128, -96, 0 },  // ELEM_QUARTER_LOOP_INVERT_TO_90_DEG_DOWN
            { 0, 3, 0, 16, -32, -32 },  // ELEM_LEFT_CURVED_LIFT_HILL
            { 0, 1, 0, 16, -32, 32 },   // ELEM_RIGHT_CURVED_LIFT_HILL
            { 0, 0, 0, 0, -64, 0 },     // ELEM_LEFT_REVERSER
            { 0, 0, 0, 0, -64, 0 },     // ELEM_RIGHT_REVERSER
            { 0, 0, 0, 0, -32, 0 },     // ELEM_AIR_THRUST_TOP_CAP
            { 0, 0, 80, 0, 32, 0 },     // ELEM_AIR_THRUST_VERTICAL_DOWN
            { 0, 0, 240, 0, -160, 0 },  // ELEM_AIR_THRUST_VERTICAL_DOWN_TO_LEVEL
            { 0, 0, 0, 0, 0, 0 },       // ELEM_BLOCK_BRAKES
            { 0, 3, 0, 32, -32, -32 },  // ELEM_BANKED_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP
            { 0, 1, 0, 32, -32, 32 },   // ELEM_BANKED_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP
            { 0, 3, 32, 0, -32, -32 },
            { 0, 1, 32, 0, -32, 32 },
            { 0, 3, 0, 64, -64, -64 },
            { 0, 1, 0, 64, -64, 64 },
            { 0, 3, 64, 0, -64, -64 },
            { 0, 1, 64, 0, -64, 64 },
            { 0, 0, 0, 16, 0, 0 },
            { 0, 0, 0, 16, 0, 0 },
            { 0, 0, 0, 16, 0, 0 },
            { 0, 0, 0, 16, 0, 0 },
            { 0, 0, 16, 0, 0, 0 },
            { 0, 0, 16, 0, 0, 0 },
            { 0, 0, 16, 0, 0, 0 },
            { 0, 0, 16, 0, 0, 0 },
            { 0, 0, 0, 8, 0, 0 },
            { 0, 0, 0, 8, 0, 0 },
            { 0, 0, 0, 8, 0, 0 },
            { 0, 0, 0, 8, 0, 0 },
            { 0, 0, 8, 0, 0, 0 },
            { 0, 0, 8, 0, 0, 0 },
            { 0, 0, 8, 0, 0, 0 },
            { 0, 0, 8, 0, 0, 0 },
            { 0, 0, 0, 8, 0, 0 },
            { 0, 0, 0, 8, 0, 0 },
            { 0, 0, 0, 8, 0, 0 },
            { 0, 0, 0, 8, 0, 0 },
            { 0, 0, 8, 0, 0, 0 },
            { 0, 0, 8, 0, 0, 0 },
            { 0, 0, 8, 0, 0, 0 },
            { 0, 0, 8, 0, 0, 0 },
            { 0, 3, 0, 96, 0, 32 },
            { 0, 1, 0, 96, 0, -32 },
            { 0, 3, 96, 0, 0, 32 },
            { 0, 1, 96, 0, 0, -32 },
            { 0, 2, 0, 96, 64, 0 },
            { 0, 2, 0, -128, -96, 0 },
            { 0, 2, 0, 128, 64, 0 },
            { 0, 0, 0, 0, 0, 0 },
            {    0,    2,    0,    0,    0,   32 }, // TrackElemType::FlatTrack1x4A
            {    0,    2,    0,    0,    0,   32 }, // TrackElemType::FlatTrack2x2
            {    0,    2,    0,    0,    0,   32 }, // TrackElemType::FlatTrack4x4
            {    0,    2,    0,    0,    0,   32 }, // TrackElemType::FlatTrack2x4
            {    0,    2,    0,    0,    0,   32 }, // TrackElemType::FlatTrack1x5
            {    0,    2,    0,    0,    0,   32 }, // TrackElemType::FlatTrack1x1A
            {    0,    2,    0,    0,    0,   32 }, // TrackElemType::FlatTrack1x4B
            {    0,    2,    0,    0,    0,   32 }, // TrackElemType::FlatTrack1x1B
            {    0,    2,    0,    0,    0,   32 }, // TrackElemType::FlatTrack1x4C
            {    0,    0,    0,   96,   32,    0 }, // TrackElemType::FlatTrack3x3
            { 0, 3, 0, 112, -64, -64 },  // TrackElemType::LeftCorkscrewUp
            { 0, 1, 0, 112, -64, 64 },   // TrackElemType::RightCorkscrewUp
            { 0, 3, 0, -112, -64, -64 }, // TrackElemType::LeftCorkscrewDown
            { 0, 1, 0, -112, -64, 64 },  // TrackElemType::RightCorkscrewDown
            { 0, 2, 0, 216, -32, -32 },  // TrackElemType::LeftMediumHalfLoopUp
            { 0, 2, 0, 216, -32, 32 },   // TrackElemType::RightMediumHalfLoopUp
            { 0, 2, 0, -216, 32, -32 },  // TrackElemType::LeftMediumHalfLoopDown
            { 0, 2, 0, -216, 32, 32 },   // TrackElemType::RightMediumHalfLoopDown
            { 0, 0, 0, 56, -64, 0 },     // TrackElemType::LeftZeroGRollUp
            { 0, 0, 0, 56, -64, 0 },     // TrackElemType::RightZeroGRollUp
            { 0, 0, 0, -56,-64, 0 },     // TrackElemType::LeftZeroGRollDown
            { 0, 0, 0, -56,-64, 0 },     // TrackElemType::RightZeroGRollDown
            { 0, 0, 0, 152, -96, 0 },    // TrackElemType::LeftLargeZeroGRollUp
            { 0, 0, 0, 152, -96, 0 },    // TrackElemType::RightLargeZeroGRollUp
            { 0, 0, 0, -152,-96, 0 },    // TrackElemType::LeftLargeZeroGRollDown
            { 0, 0, 0, -152,-96, 0 },    // TrackElemType::RightLargeZeroGRollDown
            { 0, 2, 0, 248, -64, -32 },  // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp
            { 0, 2, 0, 248, -64, 32 },   // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp
            { 0, 2, 0, -248, 64, -32 },  // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown
            { 0, 2, 0, -248, 64, 32 },   // TrackElemType::RightFlyerLargeHalfLoopInvertedDown
            { 0, 2, 0, 280, -64, -32 },  // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp
            { 0, 2, 0, 280, -64, 32 },   // TrackElemType::RightFlyerLargeHalfLoopInvertedUp
            { 0, 2, 0, -280, 64, -32 },  // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown
            { 0, 2, 0, -280, 64, 32 },   // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown
            { 0, 2, 0, 152, -32, 0 },    // TrackElemType::FlyerHalfLoopInvertedUp
            { 0, 2, 0, -152, 32, 0 },    // TrackElemType::FlyerHalfLoopUninvertedDown
            { 0, 7, 0, 48, -64, -32 }, // TrackElemType::LeftEighthToDiagUp25          
            { 0, 4, 0, 48, -64, 32 },  // TrackElemType::RightEighthToDiagUp25        
            { 0, 7, 0,-48, -64, -32 }, // TrackElemType::LeftEighthToDiagDown25       
            { 0, 4, 0,-48, -64, 32 },  // TrackElemType::RightEighthToDiagDown25      
            { 4, 0, 0, 48, -64, 32 },  // TrackElemType::LeftEighthToOrthogonalUp25   
            { 4, 1, 0, 48, -32, 64 },  // TrackElemType::RightEighthToOrthogonalUp25  
            { 4, 0, 0,-48, -64, 32 },  // TrackElemType::LeftEighthToOrthogonalDown25 
            { 4, 1, 0,-48, -32, 64 },  // TrackElemType::RightEighthToOrthogonalDown25 
        { 4, 4, 0, 16, -32, 32 },  // TrackElemType::DiagUp25ToLeftBankedUp25
        { 4, 4, 0, 16, -32, 32 },  // TrackElemType::DiagUp25ToRightBankedUp25
        { 4, 4, 0, 16, -32, 32 },  // TrackElemType::DiagLeftBankedUp25ToUp25
        { 4, 4, 0, 16, -32, 32 },  // TrackElemType::DiagRightBankedUp25ToUp25
        { 4, 4, 16, 0, -32, 32 },  // TrackElemType::DiagDown25ToLeftBankedDown25
        { 4, 4, 16, 0, -32, 32 },  // TrackElemType::DiagDown25ToRightBankedDown25
        { 4, 4, 16, 0, -32, 32 },  // TrackElemType::DiagLeftBankedDown25ToDown25
        { 4, 4, 16, 0, -32, 32 },  // TrackElemType::DiagRightBankedDown25ToDown25
        { 4, 4, 0, 8, -32, 32 },   // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25
        { 4, 4, 0, 8, -32, 32 },   // TrackElemType::DiagRightBankedFlatToRightBankedUp25
        { 4, 4, 0, 8, -32, 32 },   // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat
        { 4, 4, 0, 8, -32, 32 },   // TrackElemType::DiagRightBankedUp25ToRightBankedFlat
        { 4, 4, 8, 0, -32, 32 },   // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25
        { 4, 4, 8, 0, -32, 32 },   // TrackElemType::DiagRightBankedFlatToRightBankedDown25
        { 4, 4, 8, 0, -32, 32 },   // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat
        { 4, 4, 8, 0, -32, 32 },   // TrackElemType::DiagRightBankedDown25ToRightBankedFlat
        { 4, 4, 0, 8, -32, 32 },   // TrackElemType::DiagFlatToLeftBankedUp25
        { 4, 4, 0, 8, -32, 32 },   // TrackElemType::DiagFlatToRightBankedUp25
        { 4, 4, 0, 8, -32, 32 },   // TrackElemType::DiagLeftBankedUp25ToFlat
        { 4, 4, 0, 8, -32, 32 },   // TrackElemType::DiagRightBankedUp25ToFlat
        { 4, 4, 8, 0, -32, 32 },   // TrackElemType::DiagFlatToLeftBankedDown25
        { 4, 4, 8, 0, -32, 32 },   // TrackElemType::DiagFlatToRightBankedDown25
        { 4, 4, 8, 0, -32, 32 },   // TrackElemType::DiagLeftBankedDown25ToFlat
        { 4, 4, 8, 0, -32, 32 },   // TrackElemType::DiagRightBankedDown25ToFlat
        { 4, 4, 0, 16, -32, 32 },  // TrackElemType::DiagUp25LeftBanked
        { 4, 4, 0, 16, -32, 32 },  // TrackElemType::DiagUp25RightBanked 
        { 4, 4, 16, 0, -32, 32 },  // TrackElemType::DiagDown25LeftBanked
        { 4, 4, 16, 0, -32, 32 },  // TrackElemType::DiagDown25RightBanked
            { 0, 7, 0, 48, -64, -32 }, // TrackElemType::LeftEighthBankToDiagUp25
            { 0, 4, 0, 48, -64, 32 },  // TrackElemType::RightEighthBankToDiagUp25
            { 0, 7, 0,-48, -64, -32 }, // TrackElemType::LeftEighthBankToDiagDown25
            { 0, 4, 0,-48, -64, 32 },  // TrackElemType::RightEighthBankToDiagDown25
            { 4, 0, 0, 48, -64, 32 },  // TrackElemType::LeftEighthBankToOrthogonalUp25
            { 4, 1, 0, 48, -32, 64 },  // TrackElemType::RightEighthBankToOrthogonalUp25 
            { 4, 0, 0,-48, -64, 32 },  // TrackElemType::LeftEighthBankToOrthogonalDown25
            { 4, 1, 0,-48, -32, 64 },  // TrackElemType::RightEighthBankToOrthogonalDown25     
            { 4, 4, 0, 0, -32, 32 },    // TrackElemType::DiagBrakes
            { 4, 4, 0, 0, -32, 32 },    // TrackElemType::DiagBlockBrakes
    };
    static_assert(std::size(_trackCoordinates) == TrackElemType::Count);
    
    /** rct2: 0x0099BA64 */
    static constexpr uint8_t TrackSequenceProperties[][kMaxSequencesPerPiece] = {
        { 0 },
        /* TrackElemType::EndStation */    { TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN | TRACK_SEQUENCE_FLAG_DISALLOW_DOORS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        /* TrackElemType::BeginStation */  { TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN | TRACK_SEQUENCE_FLAG_DISALLOW_DOORS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        /* TrackElemType::MiddleStation */ { TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN | TRACK_SEQUENCE_FLAG_DISALLOW_DOORS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        /* TrackElemType::TowerBase */ { TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_0, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2, TRACK_SEQUENCE_FLAG_DIRECTION_2, 0, 0, 0, 0, 0, 0, 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        /* TrackElemType::Maze */   { TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        /* TrackElemType::SpinningTunnel */    { TRACK_SEQUENCE_FLAG_DISALLOW_DOORS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        { 0 },
        /* TrackElemType::FlatTrack1x4A    */ { TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, 0, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        /* TrackElemType::FlatTrack2x2     */ { TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        /* TrackElemType::FlatTrack4x4     */ { TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0, TRACK_SEQUENCE_FLAG_DIRECTION_0, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_3, 0, 0, TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_3, 0, 0, TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_2, TRACK_SEQUENCE_FLAG_DIRECTION_2, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 },
        /* TrackElemType::FlatTrack2x4     */ { TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0, TRACK_SEQUENCE_FLAG_DIRECTION_0, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_2, TRACK_SEQUENCE_FLAG_DIRECTION_2, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2, 0, 0, 0, 0, 0, 0, 0, 0 },
        /* TrackElemType::FlatTrack1x5     */ { TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, 0, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        /* TrackElemType::FlatTrack1x1A    */ { TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_ORIGIN | TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        /* TrackElemType::FlatTrack1x4B    */ { TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_ORIGIN, 0, TRACK_SEQUENCE_FLAG_DIRECTION_1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        /* TrackElemType::FlatTrack1x1B    */ { TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN | TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        /* TrackElemType::FlatTrack1x4C    */ { TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
        /* TrackElemType::FlatTrack3x3     */ { TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_0, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2, TRACK_SEQUENCE_FLAG_DIRECTION_2, 0, 0, 0, 0, 0, 0, 0 },
        { 0 }, // TrackElemType::LeftCorkscrewUp
        { 0 }, // TrackElemType::RightCorkscrewUp
        { 0 }, // TrackElemType::LeftCorkscrewDown
        { 0 }, // TrackElemType::RightCorkscrewDown
        { 0 }, // TrackElemType::LeftMediumHalfLoopUp
        { 0 }, // TrackElemType::RightMediumHalfLoopUp
        { 0 }, // TrackElemType::LeftMediumHalfLoopDown
        { 0 }, // TrackElemType::RightMediumHalfLoopDown
        { 0 }, // TrackElemType::LeftZeroGRollUp
        { 0 }, // TrackElemType::RightZeroGRollUp
        { 0 }, // TrackElemType::LeftZeroGRollDown
        { 0 }, // TrackElemType::RightZeroGRollDown
        { 0 }, // TrackElemType::LeftLargeZeroGRollUp
        { 0 }, // TrackElemType::RightLargeZeroGRollUp
        { 0 }, // TrackElemType::LeftLargeZeroGRollDown
        { 0 }, // TrackElemType::RightLargeZeroGRollDown
    
        /* LeftFlyerLargeHalfLoopUninvertedUp    */ { 0 },
        /* RightFlyerLargeHalfLoopUninvertedUp   */ { 0 },
        /* LeftFlyerLargeHalfLoopInvertedDown    */ { 0 },
        /* RightFlyerLargeHalfLoopInvertedDown   */ { 0 },
        /* LeftFlyerLargeHalfLoopInvertedUp      */ { 0 },
        /* RightFlyerLargeHalfLoopInvertedUp     */ { 0 },
        /* LeftFlyerLargeHalfLoopUninvertedDown  */ { 0 },
        /* RightFlyerLargeHalfLoopUninvertedDown */ { 0 },
        /* FlyerHalfLoopInvertedUp               */ { 0 },
        /* FlyerHalfLoopUninvertedUp             */ { 0 },
        { 0 }, // TrackElemType::LeftEighthToDiagUp25          
        { 0 }, // TrackElemType::RightEighthToDiagUp25        
        { 0 }, // TrackElemType::LeftEighthToDiagDown25       
        { 0 }, // TrackElemType::RightEighthToDiagDown25      
        { 0 }, // TrackElemType::LeftEighthToOrthogonalUp25   
        { 0 }, // TrackElemType::RightEighthToOrthogonalUp25  
        { 0 }, // TrackElemType::LeftEighthToOrthogonalDown25 
        { 0 }, // TrackElemType::RightEighthToOrthogonalDown25 
        { 0 }, // TrackElemType::DiagUp25ToLeftBankedUp25
        { 0 }, // TrackElemType::DiagUp25ToRightBankedUp25
        { 0 }, // TrackElemType::DiagLeftBankedUp25ToUp25
        { 0 }, // TrackElemType::DiagRightBankedUp25ToUp25
        { 0 }, // TrackElemType::DiagDown25ToLeftBankedDown25
        { 0 }, // TrackElemType::DiagDown25ToRightBankedDown25
        { 0 }, // TrackElemType::DiagLeftBankedDown25ToDown25
        { 0 }, // TrackElemType::DiagRightBankedDown25ToDown25
        { 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25
        { 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25
        { 0 }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat
        { 0 }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat
        { 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25
        { 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25
        { 0 }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat
        { 0 }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat
        { 0 }, // TrackElemType::DiagFlatToLeftBankedUp25
        { 0 }, // TrackElemType::DiagFlatToRightBankedUp25
        { 0 }, // TrackElemType::DiagLeftBankedUp25ToFlat
        { 0 }, // TrackElemType::DiagRightBankedUp25ToFlat
        { 0 }, // TrackElemType::DiagFlatToLeftBankedDown25
        { 0 }, // TrackElemType::DiagFlatToRightBankedDown25
        { 0 }, // TrackElemType::DiagLeftBankedDown25ToFlat
        { 0 }, // TrackElemType::DiagRightBankedDown25ToFlat
        { 0 }, // TrackElemType::DiagUp25LeftBanked
        { 0 }, // TrackElemType::DiagUp25RightBanked 
        { 0 }, // TrackElemType::DiagDown25LeftBanked
        { 0 }, // TrackElemType::DiagDown25RightBanked
        { 0 }, // TrackElemType::LeftEighthBankToDiagUp25
        { 0 }, // TrackElemType::RightEighthBankToDiagUp25
        { 0 }, // TrackElemType::LeftEighthBankToDiagDown25
        { 0 }, // TrackElemType::RightEighthBankToDiagDown25
        { 0 }, // TrackElemType::LeftEighthBankToOrthogonalUp25
        { 0 }, // TrackElemType::RightEighthBankToOrthogonalUp25 
        { 0 }, // TrackElemType::LeftEighthBankToOrthogonalDown25
        { 0 }, // TrackElemType::RightEighthBankToOrthogonalDown25
        /* DiagonalBrakes                        */ { 0 },
        /* DiagonalBlockBrakes                   */ { 0 },
    };
    static_assert(std::size(TrackSequenceProperties) == TrackElemType::Count);

    using WoodenSupportsBySequence = std::array<SequenceWoodenSupport, kMaxSequencesPerPiece>;
    static constexpr std::array<WoodenSupportsBySequence, TrackElemType::Count> kTrackSequenceWoodenSupports = { {
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // TrackElemType::Flat
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // TrackElemType::EndStation
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // TrackElemType::BeginStation
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // TrackElemType::MiddleStation
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // Up25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up60Deg } }, // Up60
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp25Deg } }, // FlatToUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToUp60Deg } }, // Up25ToUp60
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up60DegToUp25Deg } }, // Up60ToUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // Up25ToFlat
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // Down25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up60Deg } }, // Down60
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // FlatToDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up60DegToUp25Deg } }, // Down25ToDown60
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToUp60Deg } }, // Down60ToDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp25Deg } }, // Down25ToFlat
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Null }, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Null }, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NwSe } }, // LeftQuarterTurn5Tiles
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Null }, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Null }, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NwSe } }, // RightQuarterTurn5Tiles
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // FlatToLeftBank
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // FlatToRightBank
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // LeftBankToFlat
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // RightBankToFlat
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Null }, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Null }, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NwSe } }, // BankedLeftQuarterTurn5Tiles
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Null }, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Null }, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NwSe } }, // BankedRightQuarterTurn5Tiles
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp25Deg } }, // LeftBankToUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp25Deg } }, // RightBankToUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // Up25ToLeftBank
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // Up25ToRightBank
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // LeftBankToDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // RightBankToDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // Down25ToLeftBank
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // Down25ToRightBank
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // LeftBank
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // RightBank
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::Corner1 }, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // LeftQuarterTurn5TilesUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // RightQuarterTurn5TilesUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // LeftQuarterTurn5TilesDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // RightQuarterTurn5TilesDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, {  WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::Corner1 }, { WoodenSupportSubType::NeSw } }, // SBendLeft
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, {  WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::NeSw } }, // SBendRight
        {}, // LeftVerticalLoop
        {}, // RightVerticalLoop
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, {}, {}, { WoodenSupportSubType::Corner3 } }, // LeftQuarterTurn3Tiles
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner2 }, {}, {}, { WoodenSupportSubType::Corner2 } }, // RightQuarterTurn3Tiles
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, {}, {}, { WoodenSupportSubType::Corner3 } }, // LeftBankedQuarterTurn3Tiles
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, {}, {}, { WoodenSupportSubType::Corner3 } }, // RightBankedQuarterTurn3Tiles
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, {}, {}, { WoodenSupportSubType::Corner3 } }, // LeftQuarterTurn3TilesUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, {}, {}, { WoodenSupportSubType::Corner3 } }, // RightQuarterTurn3TilesUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, {}, {}, { WoodenSupportSubType::Corner3 } }, // LeftQuarterTurn3TilesDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, {}, {}, { WoodenSupportSubType::Corner3 } }, // RightQuarterTurn3TilesDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 } }, // LeftQuarterTurn1Tile
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 } }, // RightQuarterTurn1Tile
        {}, // LeftTwistDownToUp
        {}, // RightTwistDownToUp
        {}, // LeftTwistUpToDown
        {}, // RightTwistUpToDown
        {}, // HalfLoopUp
        {}, // HalfLoopDown
        {}, // LeftCorkscrewUp
        {}, // RightCorkscrewUp
        {}, // LeftCorkscrewDown
        {}, // RightCorkscrewDown
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp60Deg } }, // FlatToUp60
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up60DegToFlat } }, // Up60ToFlat
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up60DegToFlat } }, // FlatToDown60
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp60Deg } }, // Down60ToFlat
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // TowerBase
        {}, // TowerSection
        {}, // FlatCovered
        {}, // Up25Covered
        {}, // Up60Covered
        {}, // FlatToUp25Covered
        {}, // Up25ToUp60Covered
        {}, // Up60ToUp25Covered
        {}, // Up25ToFlatCovered
        {}, // Down25Covered
        {}, // Down60Covered
        {}, // FlatToDown25Covered
        {}, // Down25ToDown60Covered
        {}, // Down60ToDown25Covered
        {}, // Down25ToFlatCovered
        {}, // LeftQuarterTurn5TilesCovered
        {}, // RightQuarterTurn5TilesCovered
        {}, // SBendLeftCovered
        {}, // SBendRightCovered
        {}, // LeftQuarterTurn3TilesCovered
        {}, // RightQuarterTurn3TilesCovered
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::Corner1 }, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, {}, { WoodenSupportSubType::Corner2 } }, // LeftHalfBankedHelixUpSmall
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::Corner1 }, {}, { WoodenSupportSubType::Corner3 } }, // RightHalfBankedHelixUpSmall
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::Corner1 }, {}, { WoodenSupportSubType::Corner3 } }, // LeftHalfBankedHelixDownSmall
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::Corner1 }, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, {}, { WoodenSupportSubType::Corner2 } }, // RightHalfBankedHelixDownSmall
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::Corner1 }, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::NwSe }, { WoodenSupportSubType::NwSe }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NeSw } }, // LeftHalfBankedHelixUpLarge
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NwSe }, { WoodenSupportSubType::NwSe }, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::Corner1 }, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::NeSw } }, // RightHalfBankedHelixUpLarge
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NwSe }, { WoodenSupportSubType::NwSe }, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::Corner1 }, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::NeSw } }, // LeftHalfBankedHelixDownLarge
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::Corner1 }, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::NwSe }, { WoodenSupportSubType::NwSe }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NeSw } }, // RightHalfBankedHelixDownLarge
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 } }, // LeftQuarterTurn1TileUp60
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner2 } }, // RightQuarterTurn1TileUp60
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner2 } }, // LeftQuarterTurn1TileDown60
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 } }, // RightQuarterTurn1TileDown60
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // Brakes
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // Booster
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // Maze
        {}, // LeftQuarterBankedHelixLargeUp
        {}, // RightQuarterBankedHelixLargeUp
        {}, // LeftQuarterBankedHelixLargeDown
        {}, // RightQuarterBankedHelixLargeDown
        {}, // LeftQuarterHelixLargeUp
        {}, // RightQuarterHelixLargeUp
        {}, // LeftQuarterHelixLargeDown
        {}, // RightQuarterHelixLargeDown
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // Up25LeftBanked
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // Up25RightBanked
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // Waterfall
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // Rapids
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // OnRidePhoto
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // Down25LeftBanked
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // Down25RightBanked
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // Watersplash
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp60DegLongBaseSeq0 }, SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp60DegLongBaseSeq1 }, SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp60DegLongBaseSeq2 }, SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp60DegLongBaseSeq3 } }, // FlatToUp60LongBase
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up60DegToFlatLongBaseSeq0 }, SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up60DegToFlatLongBaseSeq1 }, SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up60DegToFlatLongBaseSeq2 }, SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up60DegToFlatLongBaseSeq3 } }, // Up60ToFlatLongBase
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // Whirlpool
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp60DegLongBaseSeq0 }, SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp60DegLongBaseSeq1 }, SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp60DegLongBaseSeq2 }, SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp60DegLongBaseSeq3 } }, // Down60ToFlatLongBase
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up60DegToFlatLongBaseSeq0 }, SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up60DegToFlatLongBaseSeq1 }, SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up60DegToFlatLongBaseSeq2 }, SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up60DegToFlatLongBaseSeq3 } }, // FlatToDown60LongBase
        {}, // CableLiftHill
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // ReverseFreefallSlope
        {}, // ReverseFreefallVertical
        {}, // Up90
        {}, // Down90
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // Up60ToUp90
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // Down90ToDown60
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // Up90ToUp60
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // Down60ToDown90
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // BrakeForDrop
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner1 }, { WoodenSupportSubType::Corner3 }, {} }, // LeftEighthToDiag
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // RightEighthToDiag
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // LeftEighthToOrthogonal
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner1 }, { WoodenSupportSubType::Corner3 }, {} }, // RightEighthToOrthogonal
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner1 }, { WoodenSupportSubType::Corner3 }, {} }, // LeftEighthBankToDiag
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // RightEighthBankToDiag
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // LeftEighthBankToOrthogonal
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner1 }, { WoodenSupportSubType::Corner3 }, {} }, // RightEighthBankToOrthogonal
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagUp60
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagFlatToUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagUp25ToUp60
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagUp60ToUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagUp25ToFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagDown60
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagFlatToDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagDown25ToDown60
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagDown60ToDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagDown25ToFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagFlatToUp60
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagUp60ToFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagFlatToDown60
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagDown60ToFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagFlatToLeftBank
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagFlatToRightBank
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagLeftBankToFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagRightBankToFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagLeftBankToUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagRightBankToUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagUp25ToLeftBank
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagUp25ToRightBank
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagLeftBankToDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagRightBankToDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagDown25ToLeftBank
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagDown25ToRightBank
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagLeftBank
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagRightBank
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // LogFlumeReverser
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // SpinningTunnel
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // LeftBarrelRollUpToDown
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // RightBarrelRollUpToDown
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // LeftBarrelRollDownToUp
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // RightBarrelRollDownToUp
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, {}, {}, { WoodenSupportSubType::Corner3 } }, // LeftBankToLeftQuarterTurn3TilesUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner2 }, {}, {}, { WoodenSupportSubType::Corner2 } }, // RightBankToRightQuarterTurn3TilesUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, {}, {}, { WoodenSupportSubType::Corner3 } }, // LeftQuarterTurn3TilesDown25ToLeftBank
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner2 }, {}, {}, { WoodenSupportSubType::Corner2 } }, // RightQuarterTurn3TilesDown25ToRightBank
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // PoweredLift
        {}, // LeftLargeHalfLoopUp
        {}, // RightLargeHalfLoopUp
        {}, // LeftLargeHalfLoopDown
        {}, // RightLargeHalfLoopDown
        {}, // LeftFlyerTwistUp
        {}, // RightFlyerTwistUp
        {}, // LeftFlyerTwistDown
        {}, // RightFlyerTwistDown
        {}, // FlyerHalfLoopUninvertedUp
        {}, // FlyerHalfLoopInvertedDown
        {}, // LeftFlyerCorkscrewUp
        {}, // RightFlyerCorkscrewUp
        {}, // LeftFlyerCorkscrewDown
        {}, // RightFlyerCorkscrewDown
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp25Deg }, { WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat }, { WoodenSupportSubType::NeSw }, {} }, // HeartLineTransferUp
        { SequenceWoodenSupport{}, { WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp25Deg } }, // HeartLineTransferDown
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // LeftHeartLineRoll
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // RightHeartLineRoll
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // MinigolfHoleA
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // MinigolfHoleB
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // MinigolfHoleC
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NwSe } }, // MinigolfHoleD
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NwSe } }, // MinigolfHoleE
        {}, // MultiDimInvertedFlatToDown90QuarterLoop
        { SequenceWoodenSupport{}, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // Up90ToInvertedFlatQuarterLoop
        { SequenceWoodenSupport{}, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // InvertedFlatToDown90QuarterLoop
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, {}, {}, { WoodenSupportSubType::Corner3 } }, // LeftCurvedLiftHill
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, {}, {}, { WoodenSupportSubType::Corner3 } }, // RightCurvedLiftHill
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // LeftReverser
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // RightReverser
        {}, // AirThrustTopCap
        {}, // AirThrustVerticalDown
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // AirThrustVerticalDownToLevel
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // BlockBrakes
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, {}, {}, { WoodenSupportSubType::Corner3 } }, // LeftBankedQuarterTurn3TileUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner2 }, {}, {}, { WoodenSupportSubType::Corner2 } }, // RightBankedQuarterTurn3TileUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner2 }, {}, {}, { WoodenSupportSubType::Corner2 } }, // LeftBankedQuarterTurn3TileDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::Corner3 }, {}, {}, { WoodenSupportSubType::Corner3 } }, // RightBankedQuarterTurn3TileDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::Corner1 }, {}, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::NeSw } }, // LeftBankedQuarterTurn5TileUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, {}, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NeSw } }, // RightBankedQuarterTurn5TileUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, {}, {}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NeSw } }, // LeftBankedQuarterTurn5TileDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::Corner1 }, {}, {}, { WoodenSupportSubType::Corner3 }, { WoodenSupportSubType::NeSw } }, // RightBankedQuarterTurn5TileDown25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // Up25ToLeftBankedUp25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // Up25ToRightBankedUp25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // LeftBankedUp25ToUp25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // RightBankedUp25ToUp25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // Down25ToLeftBankedDown25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // Down25ToRightBankedDown25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // LeftBankedDown25ToDown25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg } }, // RightBankedDown25ToDown25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp25Deg } }, // LeftBankedFlatToLeftBankedUp25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp25Deg } }, // RightBankedFlatToRightBankedUp25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // LeftBankedUp25ToLeftBankedFlat
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // RightBankedUp25ToRightBankedFlat
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // LeftBankedFlatToLeftBankedDown25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // RightBankedFlatToRightBankedDown25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp25Deg } }, // LeftBankedDown25ToLeftBankedFlat
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp25Deg } }, // RightBankedDown25ToRightBankedFlat
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp25Deg } }, // FlatToLeftBankedUp25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp25Deg } }, // FlatToRightBankedUp25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // LeftBankedUp25ToFlat
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // RightBankedUp25ToFlat
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // FlatToLeftBankedDown25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25DegToFlat } }, // FlatToRightBankedDown25
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp25Deg } }, // LeftBankedDown25ToFlat
        {  SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::FlatToUp25Deg } }, // RightBankedDown25ToFlat
        {}, // LeftQuarterTurn1TileUp90
        {}, // RightQuarterTurn1TileUp90
        {}, // LeftQuarterTurn1TileDown90
        {}, // RightQuarterTurn1TileDown90
        {}, // MultiDimUp90ToInvertedFlatQuarterLoop
        {}, // MultiDimFlatToDown90QuarterLoop
        {}, // MultiDimInvertedUp90ToFlatQuarterLoop
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // RotationControlToggle
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // FlatTrack1x4A
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // FlatTrack2x2
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // FlatTrack4x4
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // FlatTrack2x4
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // FlatTrack1x5
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // FlatTrack1x1A
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // FlatTrack1x4B
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw } }, // FlatTrack1x1B
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // FlatTrack1x4C
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // FlatTrack3x3
        {}, // LeftLargeCorkscrewUp
        {}, // RightLargeCorkscrewUp
        {}, // LeftLargeCorkscrewDown
        {}, // RightLargeCorkscrewDown
        {}, // LeftMediumHalfLoopUp
        {}, // RightMediumHalfLoopUp
        {}, // LeftMediumHalfLoopDown
        {}, // RightMediumHalfLoopDown
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // LeftZeroGRollUp
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // RightZeroGRollUp
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // LeftZeroGRollDown
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // RightZeroGRollDown
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // LeftLargeZeroGRollUp
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // RightLargeZeroGRollUp
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // LeftLargeZeroGRollDown
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // RightLargeZeroGRollDown
        {}, // LeftFlyerLargeHalfLoopUninvertedUp
        {}, // RightFlyerLargeHalfLoopUninvertedUp
        {}, // LeftFlyerLargeHalfLoopInvertedDown
        {}, // RightFlyerLargeHalfLoopInvertedDown
        {}, // LeftFlyerLargeHalfLoopInvertedUp
        {}, // RightFlyerLargeHalfLoopInvertedUp
        {}, // LeftFlyerLargeHalfLoopUninvertedDown
        {}, // RightFlyerLargeHalfLoopUninvertedDown
        {}, // FlyerHalfLoopInvertedUp
        {}, // FlyerHalfLoopUninvertedDown
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner1 }, { WoodenSupportSubType::Corner3 }, {} }, // LeftEighthToDiagUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // RightEighthToDiagUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner1 }, { WoodenSupportSubType::Corner3 }, {} }, // LeftEighthToDiagDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // RightEighthToDiagDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // LeftEighthToOrthogonalUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NwSe }, { WoodenSupportSubType::NwSe } }, // RightEighthToOrthogonalUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // LeftEighthToOrthogonalDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner1 }, { WoodenSupportSubType::Corner3 }, {} }, // RightEighthToOrthogonalDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagUp25ToLeftBankedUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagUp25ToRightBankedUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagLeftBankedUp25ToUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagRightBankedUp25ToUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagDown25ToLeftBankedDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagDown25ToRightBankedDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagLeftBankedDown25ToDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagRightBankedDown25ToDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagLeftBankedFlatToLeftBankedUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagRightBankedFlatToRightBankedUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagLeftBankedUp25ToLeftBankedFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagRightBankedUp25ToRightBankedFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagLeftBankedFlatToLeftBankedDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagRightBankedFlatToRightBankedDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagLeftBankedDown25ToLeftBankedFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagRightBankedDown25ToRightBankedFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagFlatToLeftBankedUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagFlatToRightBankedUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagLeftBankedUp25ToFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagRightBankedUp25ToFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagFlatToLeftBankedDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagFlatToRightBankedDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagLeftBankedDown25ToFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagRightBankedDown25ToFlat
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagUp25LeftBanked
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagUp25RightBanked
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagDown25LeftBanked
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagDown25RightBanked
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner1 }, { WoodenSupportSubType::Corner3 }, {} }, // LeftEighthBankToDiagUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // RightEighthBankToDiagUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner1 }, { WoodenSupportSubType::Corner3 }, {} }, // LeftEighthBankToDiagDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // RightEighthBankToDiagDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::NeSw } }, // LeftEighthBankToOrthogonalUp25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, { WoodenSupportSubType::NwSe }, { WoodenSupportSubType::NwSe } }, // RightEighthBankToOrthogonalUp25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // LeftEighthBankToOrthogonalDown25
        { SequenceWoodenSupport{ WoodenSupportSubType::NeSw, WoodenSupportTransitionType::Up25Deg }, { WoodenSupportSubType::NeSw }, { WoodenSupportSubType::Corner1 }, { WoodenSupportSubType::Corner3 }, {} }, // RightEighthBankToOrthogonalDown25
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagBrakes
        { SequenceWoodenSupport{}, { WoodenSupportSubType::Corner0 }, { WoodenSupportSubType::Corner2 }, {} }, // DiagBlockBrakes
    } };
    
    constexpr PreviewTrack kTrackBlockEnd { 255, 255, 255, 255, 255, {255, 255}, 255 };
    
    static constexpr PreviewTrack TrackBlocks000[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks001[] = {
        { 0, 0, 0, 0, 0,{ 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks002[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks003[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks004[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks005[] = {
        { 0, 0, 0, 0, 64, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks006[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks007[] = {
        { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks008[] = {
        { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks009[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks010[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks011[] = {
        { 0, 0, 0, 0, 64, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks012[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks013[] = {
        { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks014[] = {
        { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks015[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks016[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0111, 0 }, 0 },
        { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 },
        { 4, -32, -64, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, -32, 0, 0, { 0b0111, 0 }, 0 },
        { 6, -64, -64, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks017[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b1011, 0 }, 0 },
        { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 },
        { 4, -32, 64, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, 32, 0, 0, { 0b1011, 0 }, 0 },
        { 6, -64, 64, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks018[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks019[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks020[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks021[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks022[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0111, 0 }, 0 },
        { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 },
        { 4, -32, -64, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, -32, 0, 0, { 0b0111, 0 }, 0 },
        { 6, -64, -64, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks023[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b1011, 0 }, 0 },
        { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 },
        { 4, -32, 64, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, 32, 0, 0, { 0b1011, 0 }, 0 },
        { 6, -64, 64, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks024[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks025[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks026[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks027[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks028[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks029[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks030[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks031[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks032[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks033[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks034[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        { 1, 0, -32, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 16, 16, { 0b0111, 0b0100 }, 0 },
        { 3, -32, -32, 24, 16, { 0b1101, 0 }, 0 },
        { 4, -32, -64, 48, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, -32, 32, 16, { 0b0111, 0b0100 }, 0 },
        { 6, -64, -64, 48, 16, { 0b1111, 0b0110 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks035[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        { 1, 0, 32, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 16, 16, { 0b1011, 0b1000 }, 0 },
        { 3, -32, 32, 24, 16, { 0b1110, 0 }, 0 },
        { 4, -32, 64, 48, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, 32, 32, 16, { 0b1011, 0b1000 }, 0 },
        { 6, -64, 64, 48, 16, { 0b1111, 0b1001 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks036[] = {
        { 0, 0, 0, 48, 16, { 0b1111, 0b0011 }, 0 },
        { 1, 0, -32, 48, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 32, 16, { 0b0111, 0b0001 }, 0 },
        { 3, -32, -32, 24, 16, { 0b1101, 0 }, 0 },
        { 4, -32, -64, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, -32, 16, 16, { 0b0111, 0b0001 }, 0 },
        { 6, -64, -64, 0, 16, { 0b1111, 0b1001 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks037[] = {
        { 0, 0, 0, 48, 16, { 0b1111, 0b0011 }, 0 },
        { 1, 0, 32, 48, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 32, 16, { 0b1011, 0b0010 }, 0 },
        { 3, -32, 32, 24, 16, { 0b1110, 0 }, 0 },
        { 4, -32, 64, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, 32, 16, 16, { 0b1011, 0b0010 }, 0 },
        { 6, -64, 64, 0, 16, { 0b1111, 0b0110 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks038[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b0111, 0 }, 0 },
        { 2, -32, -32, 0, 0, { 0b1101, 0 }, 0 },
        { 3, -64, -32, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks039[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b1011, 0 }, 0 },
        { 2, -32, 32, 0, 0, { 0b1110, 0 }, 0 },
        { 3, -64, 32, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    // LeftVerticalLoop
    static constexpr PreviewTrack TrackBlocks040[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        { 1, -32, 0, 16, 16, { 0b1111, 0b1100 }, 0 },
        { 2, -64, 0, 32, 96, { 0b0010, 0 }, 0 },
        { 3, -32, 0, 120, 16, { 0b0110, 0 }, 0 },
        { 4, -32, -32, 120, 0, { 0b0000, 0 }, 0 },
        { 5, 0, 0, 120, 0, { 0b0000, 0 }, 0 },
        { 6, 0, -32, 120, 16, { 0b1001, 0 }, 0 },
        { 7, 32, -32, 32, 96, { 0b1000, 0 }, 0 },
        { 8, 0, -32, 16, 16, { 0b1111, 0b0011 }, 0 },
        { 9, -32, -32, 0, 16, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    // RightVerticalLoop
    static constexpr PreviewTrack TrackBlocks041[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        { 1, -32, 0, 16, 16, { 0b1111, 0b1100 }, 0 },
        { 2, -64, 0, 32, 96, { 0b0001, 0 }, 0 },
        { 3, -32, 0, 120, 16, { 0b1001, 0 }, 0 },
        { 4, -32, 32, 120, 0, { 0b0000, 0 }, 0 },
        { 5, 0, 0, 120, 0, { 0b0000, 0 }, 0 },
        { 6, 0, 32, 120, 16, { 0b0110, 0 }, 0 },
        { 7, 32, 32, 32, 96, { 0b0100, 0 }, 0 },
        { 8, 0, 32, 16, 16, { 0b1111, 0b0011 }, 0 },
        { 9, -32, 32, 0, 16, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks042[] = {
        { 0, 0, 0, 0, 0, { 0b0111, 0 }, 0 },
        { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0010, 0 }, 0 },
        { 3, -32, -32, 0, 0, { 0b0111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks043[] = {
        { 0, 0, 0, 0, 0, { 0b1011, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0001, 0 }, 0 },
        { 3, -32, 32, 0, 0, { 0b1011, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks044[] = {
        { 0, 0, 0, 0, 0, { 0b0111, 0 }, 0 },
        { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0010, 0 }, 0 },
        { 3, -32, -32, 0, 0, { 0b0111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks045[] = {
        { 0, 0, 0, 0, 0, { 0b1011, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0001, 0 }, 0 },
        { 3, -32, 32, 0, 0, { 0b1011, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks046[] = {
        { 0, 0, 0, 0, 16, { 0b0111, 0b0100 }, 0 },
        { 1, 0, -32, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 16, 0, { 0b0010, 0 }, 0 },
        { 3, -32, -32, 16, 16,{ 0b0111, 0b0110 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks047[] = {
        { 0, 0, 0, 0, 16, { 0b1011, 0b1000 }, 0 },
        { 1, 0, 32, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 16, 0, { 0b0001, 0 }, 0 },
        { 3, -32, 32, 16, 16,{ 0b1011, 0b1001 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks048[] = {
        { 0, 0, 0, 16, 16,{ 0b0111, 0b0011 }, 0 },
        { 1, 0, -32, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 16, 0, { 0b0010, 0 }, 0 },
        { 3, -32, -32, 0, 16, { 0b0111, 0b0001 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks049[] = {
        { 0, 0, 0, 16, 16, { 0b1011, 0b0011 }, 0 },
        { 1, 0, 32, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 16, 0, { 0b0001, 0 }, 0 },
        { 3, -32, 32, 0, 16, { 0b1011, 0b0010 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks050[] = {
        { 0, 0, 0, 0, 0, { 0b0111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks051[] = {
        { 0, 0, 0, 0, 0, { 0b1011, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks052[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 16, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks053[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 16, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks054[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -16, 16, { 0b1111, 0 }, 0 },
        { 2, -64, 0, -16, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks055[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -16, 16, { 0b1111, 0 }, 0 },
        { 2, -64, 0, -16, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    // HalfLoopUp
    static constexpr PreviewTrack TrackBlocks056[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        { 1, -32, 0, 16, 16, { 0b1111, 0b1100 }, 0 },
        { 2, -64, 0, 32, 96,{ 0b0011, 0 }, 0 },
        { 3, -32, 0, 120, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    // HalfLoopDown
    static constexpr PreviewTrack TrackBlocks057[] = {
        { 0, 0, 0, -32, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -120, 96,{ 0b0011, 0 }, 0 },
        { 2, 0, 0, -136, 16, { 0b1111, 0b1100 }, 0 },
        { 3, 32, 0, -152, 16, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks058[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 24, 32, { 0b0111, 0 }, 0 },
        { 2, -32, -32, 48, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks059[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 24, 32, { 0b1011, 0 }, 0 },
        { 2, -32, 32, 48, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks060[] = {
        { 0, 0, 0, -32, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -56, 32, { 0b0111, 0 }, 0 },
        { 2, -32, -32, -80, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks061[] = {
        { 0, 0, 0, -32, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -56, 32, { 0b1011, 0 }, 0 },
        { 2, -32, 32, -80, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks062[] = {
        { 0, 0, 0, 0, 24, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks063[] = {
        { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks064[] = {
        { 0, 0, 0, 0, 24, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks065[] = {
        { 0, 0, 0, 0, 24, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks066[] = {
        { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 },
        { 1, -32, -32, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 3, -32, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 4, 0, -32, 0, 0, { 0b1111, 0 }, 0 },
        { 5, 0, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 6, 32, -32, 0, 0, { 0b1111, 0 }, 0 },
        { 7, 32, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 8, 32, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks067[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 32, 0, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_1 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks068[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks069[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks070[] = {
        { 0, 0, 0, 0, 64, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks071[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks072[] = {
        { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks073[] = {
        { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks074[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks075[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks076[] = {
        { 0, 0, 0, 0, 64, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks077[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks078[] = {
        { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks079[] = {
        { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks080[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks081[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0111, 0 }, 0 },
        { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 },
        { 4, -32, -64, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, -32, 0, 0, { 0b0111, 0 }, 0 },
        { 6, -64, -64, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks082[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b1011, 0 }, 0 },
        { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 },
        { 4, -32, 64, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, 32, 0, 0, { 0b1011, 0 }, 0 },
        { 6, -64, 64, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks083[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b0111, 0 }, 0 },
        { 2, -32, -32, 0, 0, { 0b1101, 0 }, 0 },
        { 3, -64, -32, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks084[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b1011, 0 }, 0 },
        { 2, -32, 32, 0, 0, { 0b1110, 0 }, 0 },
        { 3, -64, 32, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks085[] = {
        { 0, 0, 0, 0, 0, { 0b0111, 0 }, 0 },
        { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0010, 0 }, 0 },
        { 3, -32, -32, 0, 0, { 0b0111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks086[] = {
        { 0, 0, 0, 0, 0, { 0b1011, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0001, 0 }, 0 },
        { 3, -32, 32, 0, 0, { 0b1011, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks087[] = {
        { 0, 0, 0, 0, 0, { 0b0111, 0 }, 0 },
        { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 4, { 0b0010, 0 }, 0 },
        { 3, -32, -32, 0, 4, { 0b0111, 0 }, 0 },
        { 4, -32, -64, 8, 0, { 0b1011, 0 }, 0 },
        { 5, 0, -64, 8, 0, { 0b0100, 0b0000 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 6, -32, -96, 8, 4, { 0b0001, 0 }, 0 },
        { 7, 0, -96, 8, 4, { 0b1011, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks088[] = {
        { 0, 0, 0, 0, 0, { 0b1011, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0b0000 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 4, { 0b0001, 0 }, 0 },
        { 3, -32, 32, 0, 4, { 0b1011, 0 }, 0 },
        { 4, -32, 64, 8, 0, { 0b0111, 0 }, 0 },
        { 5, 0, 64, 8, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 6, -32, 96, 8, 4, { 0b0010, 0 }, 0 },
        { 7, 0, 96, 8, 4, { 0b0111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks089[] = {
        { 0, 0, 0, 8, 4, { 0b0111, 0 }, 0 },
        { 1, 0, -32, 8, 4, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 8, 0, { 0b0010, 0 }, 0 },
        { 3, -32, -32, 8, 0, { 0b0111, 0 }, 0 },
        { 4, -32, -64, 0, 4, { 0b1011, 0 }, 0 },
        { 5, 0, -64, 0, 4, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 6, -32, -96, 0, 0, { 0b0001, 0 }, 0 },
        { 7, 0, -96, 0, 0, { 0b1011, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks090[] = {
        { 0, 0, 0, 8, 4, { 0b1011, 0 }, 0 },
        { 1, 0, 32, 8, 4, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 8, 0, { 0b0001, 0 }, 0 },
        { 3, -32, 32, 8, 0, { 0b1011, 0 }, 0 },
        { 4, -32, 64, 0, 4, { 0b0111, 0 }, 0 },
        { 5, 0, 64, 0, 4, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 6, -32, 96, 0, 0, { 0b0010, 0 }, 0 },
        { 7, 0, 96, 0, 0, { 0b0111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks091[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0111, 0 }, 0 },
        { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 },
        { 4, -32, -64, 0, 4, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, -32, 0, 4, { 0b0111, 0 }, 0 },
        { 6, -64, -64, 0, 4, { 0b1111, 0 }, 0 },
        { 7, -64, -96, 8, 0, { 0b1111, 0 }, 0 },
        { 8, -32, -96, 8, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 9, -64, -128, 8, 0, { 0b1011, 0 }, 0 },
        { 10, -32, -128, 8, 0, { 0b1110, 0 }, 0 },
        { 11, 0, -128, 8, 4, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 12, -32, -160, 8, 4, { 0b1011, 0 }, 0 },
        { 13, 0, -160, 8, 4, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks092[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b1011, 0 }, 0 },
        { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 },
        { 4, -32, 64, 0, 4, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, 32, 0, 4, { 0b1011, 0 }, 0 },
        { 6, -64, 64, 0, 4, { 0b1111, 0 }, 0 },
        { 7, -64, 96, 8, 0, { 0b1111, 0 }, 0 },
        { 8, -32, 96, 8, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 9, -64, 128, 8, 0, { 0b0111, 0 }, 0 },
        { 10, -32, 128, 8, 0, { 0b1101, 0 }, 0 },
        { 11, 0, 128, 8, 4, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 12, -32, 160, 8, 4, { 0b0111, 0 }, 0 },
        { 13, 0, 160, 8, 4, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks093[] = {
        { 0, 0, 0, 8, 4, { 0b1111, 0 }, 0 },
        { 1, 0, -32, 8, 4, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 8, 4, { 0b0111, 0 }, 0 },
        { 3, -32, -32, 8, 0, { 0b1101, 0 }, 0 },
        { 4, -32, -64, 8, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, -32, 8, 0, { 0b0111, 0 }, 0 },
        { 6, -64, -64, 8, 0, { 0b1111, 0 }, 0 },
        { 7, -64, -96, 0, 4, { 0b1111, 0 }, 0 },
        { 8, -32, -96, 0, 4, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 9, -64, -128, 0, 4, { 0b1011, 0 }, 0 },
        { 10, -32, -128, 0, 0, { 0b1110, 0 }, 0 },
        { 11, 0, -128, 0, 0, { 0b0100, 0b0000 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 12, -32, -160, 0, 0, { 0b1011, 0 }, 0 },
        { 13, 0, -160, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks094[] = {
        { 0, 0, 0, 8, 4, { 0b1111, 0 }, 0 },
        { 1, 0, 32, 8, 4, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 8, 4, { 0b1011, 0 }, 0 },
        { 3, -32, 32, 8, 0, { 0b1110, 0 }, 0 },
        { 4, -32, 64, 8, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, 32, 8, 0, { 0b1011, 0 }, 0 },
        { 6, -64, 64, 8, 0, { 0b1111, 0 }, 0 },
        { 7, -64, 96, 0, 4, { 0b1111, 0 }, 0 },
        { 8, -32, 96, 0, 4, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 9, -64, 128, 0, 4, { 0b0111, 0 }, 0 },
        { 10, -32, 128, 0, 0, { 0b1101, 0 }, 0 },
        { 11, 0, 128, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 12, -32, 160, 0, 0, { 0b0111, 0 }, 0 },
        { 13, 0, 160, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks095[] = {
        { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks096[] = {
        { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks097[] = {
        { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks098[] = {
        { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks099[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks100[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks101[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks102[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0111, 0 }, 0 },
        { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 },
        { 4, -32, -64, 0, 12, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, -32, 0, 12, { 0b0111, 0 }, 0 },
        { 6, -64, -64, 0, 12, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks103[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b1011, 0 }, 0 },
        { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 },
        { 4, -32, 64, 0, 12, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, 32, 0, 12, { 0b1011, 0 }, 0 },
        { 6, -64, 64, 0, 12, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks104[] = {
        { 0, 0, 0, 0, 12, { 0b1111, 0 }, 0 },
        { 1, 0, -32, 0, 12, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 12, { 0b0111, 0 }, 0 },
        { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 },
        { 4, -32, -64, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, -32, 0, 0, { 0b0111, 0 }, 0 },
        { 6, -64, -64, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks105[] = {
        { 0, 0, 0, 0, 12, { 0b1111, 0 }, 0 },
        { 1, 0, 32, 0, 12, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 12, { 0b1011, 0 }, 0 },
        { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 },
        { 4, -32, 64, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, 32, 0, 0, { 0b1011, 0 }, 0 },
        { 6, -64, 64, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks106[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0111, 0 }, 0 },
        { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 },
        { 4, -32, -64, 0, 12, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, -32, 0, 12, { 0b0111, 0 }, 0 },
        { 6, -64, -64, 0, 12, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks107[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b1011, 0 }, 0 },
        { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 },
        { 4, -32, 64, 0, 12, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, 32, 0, 12, { 0b1011, 0 }, 0 },
        { 6, -64, 64, 0, 12, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks108[] = {
        { 0, 0, 0, 0, 12, { 0b1111, 0 }, 0 },
        { 1, 0, -32, 0, 12, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 12, { 0b0111, 0 }, 0 },
        { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 },
        { 4, -32, -64, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, -32, 0, 0, { 0b0111, 0 }, 0 },
        { 6, -64, -64, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks109[] = {
        { 0, 0, 0, 0, 12, { 0b1111, 0 }, 0 },
        { 1, 0, 32, 0, 12, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 12, { 0b1011, 0 }, 0 },
        { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 },
        { 4, -32, 64, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, 32, 0, 0, { 0b1011, 0 }, 0 },
        { 6, -64, 64, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks110[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks111[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks112[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks113[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks114[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks115[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks116[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks117[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 3, -96, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 4, -128, 0, 0, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks118[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 16, 24, { 0b1111, 0 }, 0 },
        { 3, -96, 0, 40, 48, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks119[] = {
        { 0, 0, 0, 0, 48, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 40, 48, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 64, 24, { 0b1111, 0 }, 0 },
        { 3, -96, 0, 80, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks120[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks121[] = {
        { 0, 0, 0, 40, 48, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 16, 24, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 3, -96, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks122[] = {
        { 0, 0, 0, 80, 8, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 64, 24, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 40, 48, { 0b1111, 0 }, 0 },
        { 3, -96, 0, 0, 48, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks123[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 },
        { 1, -32, 0, 0, 8, { 0b1111, 0b0011 }, 0 },
        { 2, -64, 0, -32, 32, { 0b1111, 0b0011 }, 0 },
        { 3, -96, 0, -96, 64, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks124[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 32, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 0, 48, { 0b1111, 0 }, 0 },
        { 3, -96, 0, 0, 80, { 0b1111, 0 }, 0 },
        { 4, -128, 0, 0, 160, { 0b1111, 0 }, 0 },
        { 5, -192, 0, 0, 208, { 0b1111, 0 }, 0 },
        { 6, -160, 0, 0, 208, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks125[] = {
        { 0, 0, 0, 0, 48, { 0b1111, 0 }, 0 },
        { 1, 32, 0, 0, 48, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks126[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 1, 32, 0, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks127[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 1, 32, 0, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks128[] = {
        { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 1, 32, 0, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks129[] = {
        { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks130[] = {
        { 0, 0, 0, 0, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks131[] = {
        { 0, 0, 0, 0, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 1, 32, 0, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks132[] = {
        { 0, 0, 0, 0, 24, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks133[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -32, -32, 0, 0, { 0b1000, 0 }, 0 },
        { 3, -64, 0, 0, 0, { 0b0010, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 4, -64, -32, 0, 0, { 0b0001, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks134[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -32, 32, 0, 0, { 0b0100, 0 }, 0 },
        { 3, -64, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 4, -64, 32, 0, 0, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks135[] = {
        { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b0001, 0 }, 0 },
        { 2, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 4, -64, 32, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks136[] = {
        { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, 0 },
        { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 4, -32, 64, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks137[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -32, -32, 0, 0, { 0b1000, 0 }, 0 },
        { 3, -64, 0, 0, 0, { 0b0010, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 4, -64, -32, 0, 0, { 0b0001, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks138[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -32, 32, 0, 0, { 0b0100, 0 }, 0 },
        { 3, -64, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 4, -64, 32, 0, 0, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks139[] = {
        { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b0001, 0 }, 0 },
        { 2, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 4, -64, 32, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks140[] = {
        { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, 0 },
        { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 4, -32, 64, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks141[] = {
        { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 0, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks142[] = {
        { 0, 0, 0, 0, 16, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 16, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 16, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 16, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks143[] = {
        { 0, 0, 0, 0, 64, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 64, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 64, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 64, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks144[] = {
        { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks145[] = {
        { 0, 0, 0, 0, 32, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 32, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 32, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 32, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks146[] = {
        { 0, 0, 0, 0, 32, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 32, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 32, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 32, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks147[] = {
        { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks148[] = {
        { 0, 0, 0, 0, 16, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 16, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 16, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 16, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks149[] = {
        { 0, 0, 0, 0, 64, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 64, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 64, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 64, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks150[] = {
        { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks151[] = {
        { 0, 0, 0, 0, 32, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 32, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 32, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 32, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks152[] = {
        { 0, 0, 0, 0, 32, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 32, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 32, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 32, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks153[] = {
        { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks154[] = {
        { 0, 0, 0, 0, 24, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 24, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 24, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 24, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks155[] = {
        { 0, 0, 0, 0, 24, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 24, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 24, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 24, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks156[] = {
        { 0, 0, 0, 0, 24, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 24, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 24, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 24, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks157[] = {
        { 0, 0, 0, 0, 24, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 24, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 24, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 24, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks158[] = {
        { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 0, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks159[] = {
        { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 0, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks160[] = {
        { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 0, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks161[] = {
        { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 0, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks162[] = {
        { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks163[] = {
        { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks164[] = {
        { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks165[] = {
        { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks166[] = {
        { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks167[] = {
        { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks168[] = {
        { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks169[] = {
        { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks170[] = {
        { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 0, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks171[] = {
        { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 0, 0, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks172[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks173[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks174[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 0, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks175[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 0, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks176[] = {
        { 0, 0, 0, -32, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -32, 16, { 0b1111, 0 }, 0 },
        { 2, -64, 0, -32, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks177[] = {
        { 0, 0, 0, -32, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -32, 16, { 0b1111, 0 }, 0 },
        { 2, -64, 0, -32, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks178[] = {
        { 0, 0, 0, 0, 0, { 0b0111, 0b0100 }, 0 },
        { 1, 0, -32, 0, 16, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 16, { 0b0010, 0 }, 0 },
        { 3, -32, -32, 16, 16,{ 0b0111, 0b0110 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks179[] = {
        { 0, 0, 0, 0, 16, { 0b1011, 0b1000 }, 0 },
        { 1, 0, 32, 0, 16, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 16, { 0b0001, 0 }, 0 },
        { 3, -32, 32, 16, 16,{ 0b1011, 0b1001 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks180[] = {
        { 0, 0, 0, 16, 16,{ 0b0111, 0b0011 }, 0 },
        { 1, 0, -32, 0, 16, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 16, { 0b0010, 0 }, 0 },
        { 3, -32, -32, 0, 0, { 0b0111, 0b0001 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks181[] = {
        { 0, 0, 0, 16, 16, { 0b1011, 0b0011 }, 0 },
        { 1, 0, 32, 0, 16, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 16, { 0b0001, 0 }, 0 },
        { 3, -32, 32, 0, 0, { 0b1011, 0b0010 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks182[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    // LeftLargeHalfLoopUp
    static constexpr PreviewTrack TrackBlocks183[] = {
        { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 },
        { 1, -32, 0, 16, 40, { 0b1111, 0b1100 }, 0 },
        { 2, -64, 0, 32, 56, { 0b1111, 0 }, 0 },
        { 3, -96, 0, 64, 192, { 0b1111, 0 }, 0 },
        { 4, -128, -32, 120, 96, { 0b1111, 0 }, 0 },
        { 5, -96, -32, 64, 192, { 0b1111, 0 }, 0 },
        { 6, -64, -32, 248, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    // RightLargeHalfLoopUp
    static constexpr PreviewTrack TrackBlocks184[] = {
        { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 },
        { 1, -32, 0, 16, 40, { 0b1111, 0b1100 }, 0 },
        { 2, -64, 0, 32, 56, { 0b1111, 0 }, 0 },
        { 3, -96, 0, 64, 192, { 0b1111, 0 }, 0 },
        { 4, -128, 32, 120, 96, { 0b1111, 0 }, 0 },
        { 5, -96, 32, 64, 192, { 0b1111, 0 }, 0 },
        { 6, -64, 32, 248, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    // LeftLargeHalfLoopDown
    static constexpr PreviewTrack TrackBlocks185[] = {
        { 0, 0, 0, -32, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -216, 192, { 0b1111, 0 }, 0 },
        { 2, -64, 0, -160, 96, { 0b1111, 0 }, 0 },
        { 3, -32, -32, -216, 192, { 0b1111, 0 }, 0 },
        { 4, 0, -32, -248, 56, { 0b1111, 0 }, 0 },
        { 5, 32, -32, -264, 40, { 0b1111, 0b1100 }, 0 },
        { 6, 64, -32, -280, 24, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    // RightLargeHalfLoopDown
    static constexpr PreviewTrack TrackBlocks186[] = {
        { 0, 0, 0, -32, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -216, 192, { 0b1111, 0 }, 0 },
        { 2, -64, 0, -160, 96, { 0b1111, 0 }, 0 },
        { 3, -32, 32, -216, 192, { 0b1111, 0 }, 0 },
        { 4, 0, 32, -248, 56, { 0b1111, 0 }, 0 },
        { 5, 32, 32, -264, 40, { 0b1111, 0b1100 }, 0 },
        { 6, 64, 32, -280, 24, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks187[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -16, 16, { 0b1111, 0 }, 0 },
        { 2, -64, 0, -16, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks188[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -16, 16, { 0b1111, 0 }, 0 },
        { 2, -64, 0, -16, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks189[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 16, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks190[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 16, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    // FlyerHalfLoopUninvertedUp
    static constexpr PreviewTrack TrackBlocks191[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        { 1, -32, 0, 16, 16, { 0b1111, 0b1100 }, 0 },
        { 2, -64, 0, 32, 96,{ 0b0011, 0 }, 0 },
        { 3, -32, 0, 120, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    // FlyerHalfLoopInvertedDown
    static constexpr PreviewTrack TrackBlocks192[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -88, 96,{ 0b0011, 0 }, 0 },
        { 2, 0, 0, -104, 16, { 0b1111, 0b1100 }, 0 },
        { 3, 32, 0, -120, 16, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks193[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 24, 32, { 0b0111, 0 }, 0 },
        { 2, -32, -32, 48, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks194[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 24, 32, { 0b1011, 0 }, 0 },
        { 2, -32, 32, 48, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks195[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -24, 32, { 0b0111, 0 }, 0 },
        { 2, -32, -32, -48, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks196[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -24, 32, { 0b1011, 0 }, 0 },
        { 2, -32, 32, -48, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks197[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 32, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 16, 0, { 0b1111, 0 }, 0 },
        { 3, 0, 0, 32, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks198[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -32, 32, { 0b1111, 0 }, 0 },
        { 2, -64, 0, -16, 0, { 0b1111, 0 }, 0 },
        { 3, 0, 0, -32, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks199[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 3, -96, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 4, -128, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 5, -160, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks200[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 3, -96, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 4, -128, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 5, -160, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks201[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks202[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks203[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks204[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -32, 32, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks205[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -32, -32, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks206[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 1, -32, 0, -40, 32, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 2, -64, 0, -96, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 3, -96, 0, -96, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks207[] = {
        { 0, 0, 0, 0, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 1, 32, 0, 56, 32, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 2, 64, 0, 96, 16, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks208[] = {
        { 0, 0, 0, -32, 16, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 1, -32, 0, -72, 32, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 2, -64, 0, -128, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 3, -96, 0, -128, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks209[] = {
        { 0, 0, 0, 0, 0, { 0b0111, 0 }, 0 },
        { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 8, { 0b0010, 0 }, 0 },
        { 3, -32, -32, 0, 8, { 0b0111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks210[] = {
        { 0, 0, 0, 0, 0, { 0b1011, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 0, 8, { 0b0001, 0 }, 0 },
        { 3, -32, 32, 0, 8, { 0b1011, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks211[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, -32, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -32, -32, 0, 0, { 0b1111, 0 }, 0 },
        { 3, -64, -32, 0, 0, { 0b1111, 0 }, 0 },
        { 4, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 5, -64, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks212[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -32, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 3, -64, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 4, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 5, -64, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks213[] = {
        { 0, 0, 0, 0, 32, { 0b1111, 0 }, 0 },
        { 1, 32, 0, 0, 32, { 0b1111, 0 }, 0 },
        { 2, -64, 0, 0, 32, { 0b1111, 0 }, 0 },
        { 3, -32, 0, 0, 32, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks214[] = {
        { 0, 0, 0, 0, 48, { 0b1111, 0 }, 0 },
        { 1, 32, 0, 0, 48, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks215[] = {
        { 0, 0, 0, 0, 208, { 0b1111, 0 }, 0 },
        { 1, 32, 0, 0, 208, { 0b1111, 0 }, 0 },
        { 2, -32, 0, 0, 160, { 0b1111, 0 }, 0 },
        { 3, -64, 0, 0, 80, { 0b1111, 0 }, 0 },
        { 4, -96, 0, 0, 48, { 0b1111, 0 }, 0 },
        { 5, -128, 0, 0, 32, { 0b1111, 0 }, 0 },
        { 6, -160, 0, 0, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks216[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks217[] = {
        { 0, 0, 0, 0, 16, { 0b0111, 0b0100 }, 0 },
        { 1, 0, -32, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 16, 0, { 0b0010, 0 }, 0 },
        { 3, -32, -32, 16, 16,{ 0b0111, 0b0110 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks218[] = {
        { 0, 0, 0, 0, 16, { 0b1011, 0b1000 }, 0 },
        { 1, 0, 32, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 16, 0, { 0b0001, 0 }, 0 },
        { 3, -32, 32, 16, 16,{ 0b1011, 0b1001 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks219[] = {
        { 0, 0, 0, 16, 16,{ 0b0111, 0b0011 }, 0 },
        { 1, 0, -32, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 16, 0, { 0b0010, 0 }, 0 },
        { 3, -32, -32, 0, 16, { 0b0111, 0b0001 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks220[] = {
        { 0, 0, 0, 16, 16, { 0b1011, 0b0011 }, 0 },
        { 1, 0, 32, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 16, 0, { 0b0001, 0 }, 0 },
        { 3, -32, 32, 0, 16, { 0b1011, 0b0010 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks221[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        { 1, 0, -32, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 16, 16, { 0b0111, 0b0100 }, 0 },
        { 3, -32, -32, 24, 16, { 0b1101, 0 }, 0 },
        { 4, -32, -64, 48, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, -32, 32, 16, { 0b0111, 0b0100 }, 0 },
        { 6, -64, -64, 48, 16, { 0b1111, 0b0110 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks222[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        { 1, 0, 32, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 16, 16, { 0b1011, 0b1000 }, 0 },
        { 3, -32, 32, 24, 16, { 0b1110, 0 }, 0 },
        { 4, -32, 64, 48, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, 32, 32, 16, { 0b1011, 0b1000 }, 0 },
        { 6, -64, 64, 48, 16, { 0b1111, 0b1001 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks223[] = {
        { 0, 0, 0, 48, 16, { 0b1111, 0b0011 }, 0 },
        { 1, 0, -32, 48, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 32, 16, { 0b0111, 0b0001 }, 0 },
        { 3, -32, -32, 24, 16, { 0b1101, 0 }, 0 },
        { 4, -32, -64, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, -32, 16, 16, { 0b0111, 0b0001 }, 0 },
        { 6, -64, -64, 0, 16, { 0b1111, 0b1001 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks224[] = {
        { 0, 0, 0, 48, 16, { 0b1111, 0b0011 }, 0 },
        { 1, 0, 32, 48, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 2, -32, 0, 32, 16, { 0b1011, 0b0010 }, 0 },
        { 3, -32, 32, 24, 16, { 0b1110, 0 }, 0 },
        { 4, -32, 64, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 5, -64, 32, 16, 16, { 0b1011, 0b0010 }, 0 },
        { 6, -64, 64, 0, 16, { 0b1111, 0b0110 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks225[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks226[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks227[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks228[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks229[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks230[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks231[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks232[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks233[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks234[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks235[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks236[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks237[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks238[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks239[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks240[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks241[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks242[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks243[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks244[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks245[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks246[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks247[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks248[] = {
        { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks249[] = {
        { 0, 0, 0, 0, 72, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 1, 0, 32, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks250[] = {
        { 0, 0, 0, 0, 72, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 1, 0, -32, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks251[] = {
        { 0, 0, 0, 0, 72, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 1, 0, 32, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks252[] = {
        { 0, 0, 0, 0, 72, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 1, 0, -32, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks253[] = {
        { 0, 0, 0, 0, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 1, 32, 0, 56, 32, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 2, 64, 0, 96, 16, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks254[] = {
        { 0, 0, 0, -32, 16, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 1, -32, 0, -72, 32, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 2, -64, 0, -128, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 3, -96, 0, -128, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocks255[] = {
        { 0, 0, 0, 32, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 1, 32, 0, 88, 32, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        { 2, 64, 0, 128, 16, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRotationControlToggle[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksFlatTrack1x4A[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -64, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 3, 32, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksFlatTrack2x2[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 2, 32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 3, 32, 32, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksFlatTrack4x4[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 2, 0, 64, 0, 0, { 0b1111, 0 }, 0 },
        { 3, 0, 96, 0, 0, { 0b1111, 0 }, 0 },
        { 4, 32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 5, 32, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 6, 32, 64, 0, 0, { 0b1111, 0 }, 0 },
        { 7, 32, 96, 0, 0, { 0b1111, 0 }, 0 },
        { 8, 64, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 9, 64, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 10, 64, 64, 0, 0, { 0b1111, 0 }, 0 },
        { 11, 64, 96, 0, 0, { 0b1111, 0 }, 0 },
        { 12, 96, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 13, 96, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 14, 96, 64, 0, 0, { 0b1111, 0 }, 0 },
        { 15, 96, 96, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksFlatTrack2x4[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, 0, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 2, 0, 64, 0, 0, { 0b1111, 0 }, 0 },
        { 3, 0, 96, 0, 0, { 0b1111, 0 }, 0 },
        { 4, 32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 5, 32, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 6, 32, 64, 0, 0, { 0b1111, 0 }, 0 },
        { 7, 32, 96, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksFlatTrack1x5[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -64, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 3, 32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 4, 64, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksFlatTrack1x1A[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksFlatTrack1x4B[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -64, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 3, 32, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksFlatTrack1x1B[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksFlatTrack1x4C[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -64, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 3, 32, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksFlatTrack3x3[] = {
        { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 1, -32, -32, 0, 0, { 0b1111, 0 }, 0 },
        { 2, -32, 0, 0, 0, { 0b1111, 0 }, 0 },
        { 3, -32, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 4, 0, -32, 0, 0, { 0b1111, 0 }, 0 },
        { 5, 0, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 6, 32, -32, 0, 0, { 0b1111, 0 }, 0 },
        { 7, 32, 32, 0, 0, { 0b1111, 0 }, 0 },
        { 8, 32, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 },
        kTrackBlockEnd
    };
    
    
    static constexpr PreviewTrack TrackBlocksLeftLargeCorkscrewUp[] = {
        { 0,   0,   0,  0, 16, { 0b1111, 0 }, 0 },
        { 1, -32,   0,  8, 32, { 0b1111, 0 }, 0 },
        { 2, -64,   0, 32, 24, { 0b0111, 0 }, 0 },
        { 3, -32, -32, 32, 24, { 0b1000, 0 }, 0 },
        { 4, -64, -32, 48, 40, { 0b1111, 0 }, 0 },
        { 5, -64, -64, 72, 24, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightLargeCorkscrewUp[] = {
        { 0,   0,   0 ,  0, 16, { 0b1111, 0 }, 0 },
        { 1, -32,   0,   8, 32, { 0b1111, 0 }, 0 },
        { 2, -64,   0,  32, 24, { 0b1011, 0 }, 0 },
        { 3, -32,  32,  32, 24, { 0b0100, 0 }, 0 },
        { 4, -64,  32,  48, 40, { 0b1111, 0 }, 0 },
        { 5, -64,  64,  72, 24, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksLeftLargeCorkscrewDown[] = {
        { 0,   0,   0 ,  -40, 24, { 0b1111, 0 }, 0 },
        { 1, -32,   0,   -64, 40, { 0b1111, 0 }, 0 },
        { 2, -32, -32,   -80, 24, { 0b1000, 0 }, 0 },
        { 3, -64,   0,   -80, 24, { 0b0111, 0 }, 0 },
        { 4, -64, -32,  -104, 32, { 0b1111, 0 }, 0 },
        { 5, -64, -64,  -112, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightLargeCorkscrewDown[] = {
        { 0,   0,   0 ,  -40, 24, { 0b1111, 0 }, 0 },
        { 1, -32,   0,   -64, 40, { 0b1111, 0 }, 0 },
        { 2, -32,  32,   -80, 24, { 0b0100, 0 }, 0 },
        { 3, -64,   0,   -80, 24, { 0b1011, 0 }, 0 },
        { 4, -64,  32,  -104, 32, { 0b1111, 0 }, 0 },
        { 5, -64,  64,  -112, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksLeftMediumHalfLoopUp[] = {
        { 0,   0,   0,  0, 24, { 0b1111, 0 }, 0 },
        { 1, -32,   0, 16, 48, { 0b1111, 0 }, 0 },
        { 2, -64,   0, 56,120, { 0b1111, 0 }, 0 },
        { 3, -64, -32, 56,120, { 0b1111, 0 }, 0 },
        { 4, -32, -32,168, 24, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightMediumHalfLoopUp[] = {
        { 0,   0,   0,  0, 24, { 0b1111, 0 }, 0 },
        { 1, -32,   0, 16, 48, { 0b1111, 0 }, 0 },
        { 2, -64,   0, 56,120, { 0b1111, 0 }, 0 },
        { 3, -64,  32, 56,120, { 0b1111, 0 }, 0 },
        { 4, -32,  32,168, 24, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksLeftMediumHalfLoopDown[] = {
        { 0,   0,   0,  -48, 24, { 0b1111, 0 }, 0 },
        { 1, -32,   0, -160,120, { 0b1111, 0 }, 0 },
        { 2, -32, -32, -160,120, { 0b1111, 0 }, 0 },
        { 3,   0, -32, -200, 48, { 0b1111, 0 }, 0 },
        { 4,  32, -32, -216, 24, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightMediumHalfLoopDown[] = {
        { 0,   0,   0 ,  -48,  24, { 0b1111, 0 }, 0 },
        { 1, -32,   0,  -160, 120, { 0b1111, 0 }, 0 },
        { 2, -32,  32,  -160, 120, { 0b1111, 0 }, 0 },
        { 3,   0,  32,  -200,  48, { 0b1111, 0 }, 0 },
        { 4,  32,  32,  -216,  24, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksLeftZeroGRollUp[] = {
        { 0,   0,   0,  0, 16, { 0b1111, 0 }, 0 },
        { 1, -32,   0,  8, 24, { 0b1111, 0 }, 0 },
        { 2, -64,   0,  24, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightZeroGRollUp[] = {
        { 0,   0,   0,  0, 16, { 0b1111, 0 }, 0 },
        { 1, -32,   0,  8, 24, { 0b1111, 0 }, 0 },
        { 2, -64,   0,  24, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksLeftZeroGRollDown[] = {
        { 0,   0,   0, -32, 16, { 0b1111, 0 }, 0 },
        { 1, -32,   0, -48, 24, { 0b1111, 0 }, 0 },
        { 2, -64,   0, -56, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightZeroGRollDown[] = {
        { 0,   0,   0 ,-32, 16, { 0b1111, 0 }, 0 },
        { 1, -32,   0, -48, 24, { 0b1111, 0 }, 0 },
        { 2, -64,   0, -56, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    
    static constexpr PreviewTrack TrackBlocksLeftLargeZeroGRollUp[] = {
        { 0,   0,   0,  0, 64, { 0b1111, 0 }, 0 },
        { 1, -32,   0, 56, 48, { 0b1111, 0 }, 0 },
        { 2, -64,   0, 96, 40, { 0b1111, 0 }, 0 },
        { 3, -96,   0,120, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightLargeZeroGRollUp[] = {
        { 0,   0,   0,   0, 64, { 0b1111, 0 }, 0 },
        { 1, -32,   0,  56, 48, { 0b1111, 0 }, 0 },
        { 2, -64,   0,  96, 40, { 0b1111, 0 }, 0 },
        { 3, -96,   0, 120, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksLeftLargeZeroGRollDown[] = {
        { 0,   0,   0,  -32, 16, { 0b1111, 0 }, 0 },
        { 1, -32,   0,  -56, 40, { 0b1111, 0 }, 0 },
        { 2, -64,   0,  -96, 48, { 0b1111, 0 }, 0 },
        { 3, -96,   0,  -152, 64, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightLargeZeroGRollDown[] = {
        { 0,   0,   0 , -32, 16, { 0b1111, 0 }, 0 },
        { 1, -32,   0,  -56, 40, { 0b1111, 0 }, 0 },
        { 2, -64,   0,  -96, 48, { 0b1111, 0 }, 0 },
        { 3, -96,   0, -152, 64, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksLeftFlyerLargeHalfLoopUninvertedUp[] = {
        { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 },
        { 1, -32, 0, 16, 40, { 0b1111, 0b1100 }, 0 },
        { 2, -64, 0, 32, 56, { 0b1111, 0 }, 0 },
        { 3, -96, 0, 64, 192, { 0b1111, 0 }, 0 },
        { 4, -128, -32, 120, 96, { 0b1111, 0 }, 0 },
        { 5, -96, -32, 64, 192, { 0b1111, 0 }, 0 },
        { 6, -64, -32, 248, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightFlyerLargeHalfLoopUninvertedUp[] = {
        { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 },
        { 1, -32, 0, 16, 40, { 0b1111, 0b1100 }, 0 },
        { 2, -64, 0, 32, 56, { 0b1111, 0 }, 0 },
        { 3, -96, 0, 64, 192, { 0b1111, 0 }, 0 },
        { 4, -128, 32, 120, 96, { 0b1111, 0 }, 0 },
        { 5, -96, 32, 64, 192, { 0b1111, 0 }, 0 },
        { 6, -64, 32, 248, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksLeftFlyerLargeHalfLoopInvertedDown[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -184, 192, { 0b1111, 0 }, 0 },
        { 2, -64, 0, -128, 96, { 0b1111, 0 }, 0 },
        { 3, -32, -32, -184, 192, { 0b1111, 0 }, 0 },
        { 4, 0, -32, -216, 56, { 0b1111, 0 }, 0 },
        { 5, 32, -32, -232, 40, { 0b1111, 0b1100 }, 0 },
        { 6, 64, -32, -248, 24, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightFlyerLargeHalfLoopInvertedDown[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -184, 192, { 0b1111, 0 }, 0 },
        { 2, -64, 0, -128, 96, { 0b1111, 0 }, 0 },
        { 3, -32, 32, -184, 192, { 0b1111, 0 }, 0 },
        { 4, 0, 32, -216, 56, { 0b1111, 0 }, 0 },
        { 5, 32, 32, -232, 40, { 0b1111, 0b1100 }, 0 },
        { 6, 64, 32, -248, 24, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksLeftFlyerLargeHalfLoopInvertedUp[] = {
        { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 },
        { 1, -32, 0, 16, 40, { 0b1111, 0b1100 }, 0 },
        { 2, -64, 0, 32, 56, { 0b1111, 0 }, 0 },
        { 3, -96, 0, 64, 192, { 0b1111, 0 }, 0 },
        { 4, -128, -32, 120, 96, { 0b1111, 0 }, 0 },
        { 5, -96, -32, 64, 192, { 0b1111, 0 }, 0 },
        { 6, -64, -32, 248, 32, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightFlyerLargeHalfLoopInvertedUp[] = {
        { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 },
        { 1, -32, 0, 16, 40, { 0b1111, 0b1100 }, 0 },
        { 2, -64, 0, 32, 56, { 0b1111, 0 }, 0 },
        { 3, -96, 0, 64, 192, { 0b1111, 0 }, 0 },
        { 4, -128, 32, 120, 96, { 0b1111, 0 }, 0 },
        { 5, -96, 32, 64, 192, { 0b1111, 0 }, 0 },
        { 6, -64, 32, 248, 32, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksLeftFlyerLargeHalfLoopUninvertedDown[] = {
        { 0, 0, 0, -32, 32, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -216, 192, { 0b1111, 0 }, 0 },
        { 2, -64, 0, -160, 96, { 0b1111, 0 }, 0 },
        { 3, -32, -32, -216, 192, { 0b1111, 0 }, 0 },
        { 4, 0, -32, -248, 56, { 0b1111, 0 }, 0 },
        { 5, 32, -32, -264, 40, { 0b1111, 0b1100 }, 0 },
        { 6, 64, -32, -280, 24, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightFlyerLargeHalfLoopUninvertedDown[] = {
        { 0, 0, 0, -32, 32, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -216, 192, { 0b1111, 0 }, 0 },
        { 2, -64, 0, -160, 96, { 0b1111, 0 }, 0 },
        { 3, -32, 32, -216, 192, { 0b1111, 0 }, 0 },
        { 4, 0, 32, -248, 56, { 0b1111, 0 }, 0 },
        { 5, 32, 32, -264, 40, { 0b1111, 0b1100 }, 0 },
        { 6, 64, 32, -280, 24, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksFlyerHalfLoopUpInverted[] = {
        { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 },
        { 1, -32, 0, 16, 16, { 0b1111, 0b1100 }, 0 },
        { 2, -64, 0, 32, 96,{ 0b0011, 0 }, 0 },
        { 3, -32, 0, 120, 32, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksFlyerHalfLoopDownUpright[] = {
        { 0, 0, 0, -32, 32, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -120, 96,{ 0b0011, 0 }, 0 },
        { 2, 0, 0, -136, 16, { 0b1111, 0b1100 }, 0 },
        { 3, 32, 0, -152, 16, { 0b1111, 0b1100 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksLeftEighthToDiagUp25[] = {
        { 0, 0, 0,      0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0,   16, 32, { 0b1111, 0 }, 0 },
        { 2, -32, -32, 32, 16, { 0b1000, 0 }, 0 },
        { 3, -64, 0,   32, 16, { 0b0010, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 4, -64, -32, 32, 24, { 0b0001, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightEighthToDiagUp25[] = {
        { 0, 0, 0,     0, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0,  16, 32, { 0b1111, 0 }, 0 },
        { 2, -32, 32, 32, 16, { 0b0100, 0 }, 0 },
        { 3, -64, 0,  32, 16, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 4, -64, 32, 32, 24, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksLeftEighthToDiagDown25[] = {
        { 0, 0, 0, -16, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -32, 16, { 0b1111, 0 }, 0 },
        { 2, -32, -32, -48, 16, { 0b1000, 0 }, 0 },
        { 3, -64, 0, -48, 16, { 0b0010, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 4, -64, -32, -48, 16, { 0b0001, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightEighthToDiagDown25[] = {
        { 0, 0, 0, -16, 16, { 0b1111, 0 }, 0 },
        { 1, -32, 0, -32, 16, { 0b1111, 0 }, 0 },
        { 2, -32, 32, -48, 16, { 0b0100, 0 }, 0 },
        { 3, -64, 0, -48, 16, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 4, -64, 32, -48, 16, { 0b0010, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksLeftEighthToOrthogonalUp25[] = {
        { 0, 0, 0, 0, 16, { 0b1101, 0 }, 0 },
        { 1, -32, 0, 0, 16, { 0b0001, 0 }, 0 },
        { 2, 0, 32, 0, 16, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 16, 16, { 0b1111, 0 }, 0 },
        { 4, -64, 32, 32, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightEighthToOrthogonalUp25[] = {
        { 0, 0, 0, 0, 16, { 0b1101, 0 }, 0 },
        { 1, 0, 32, 0, 16, { 0b0100, 0 }, 0 },
        { 2, -32, 0, 0, 16, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, 16, 16, { 0b1111, 0 }, 0 },
        { 4, -32, 64, 32, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksLeftEighthToOrthogonalDown25[] = {
        { 0, 0, 0, -16, 24, { 0b1101, 0 }, 0 },
        { 1, -32, 0, -16, 16, { 0b0001, 0 }, 0 },
        { 2, 0, 32, -16, 16, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32, -32, 32, { 0b1111, 0 }, 0 },
        { 4, -64, 32, -48, 16, { 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    static constexpr PreviewTrack TrackBlocksRightEighthToOrthogonalDown25[] = {
        { 0, 0, 0,  -16, 24, { 0b1101, 0 }, 0 },
        { 1, 0, 32,  -16, 16,{ 0b0100, 0 }, 0 },
        { 2, -32, 0,  -16, 16,{ 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 },
        { 3, -32, 32,  -32, 32,{ 0b1111, 0 }, 0 },
        { 4, -32, 64,  -48, 16,{ 0b1111, 0 }, 0 },
        kTrackBlockEnd
    };
    
    
    // rct2: 0x00994638
    static constexpr std::array<const PreviewTrack*, TrackElemType::Count> TrackBlocks = {
        TrackBlocks000,
        TrackBlocks001,
        TrackBlocks002,
        TrackBlocks003,
        TrackBlocks004,
        TrackBlocks005,
        TrackBlocks006,
        TrackBlocks007,
        TrackBlocks008,
        TrackBlocks009,
        TrackBlocks010,
        TrackBlocks011,
        TrackBlocks012,
        TrackBlocks013,
        TrackBlocks014,
        TrackBlocks015,
        TrackBlocks016,
        TrackBlocks017,
        TrackBlocks018,
        TrackBlocks019,
        TrackBlocks020,
        TrackBlocks021,
        TrackBlocks022,
        TrackBlocks023,
        TrackBlocks024,
        TrackBlocks025,
        TrackBlocks026,
        TrackBlocks027,
        TrackBlocks028,
        TrackBlocks029,
        TrackBlocks030,
        TrackBlocks031,
        TrackBlocks032,
        TrackBlocks033,
        TrackBlocks034,
        TrackBlocks035,
        TrackBlocks036,
        TrackBlocks037,
        TrackBlocks038,
        TrackBlocks039,
        TrackBlocks040,
        TrackBlocks041,
        TrackBlocks042,
        TrackBlocks043,
        TrackBlocks044,
        TrackBlocks045,
        TrackBlocks046,
        TrackBlocks047,
        TrackBlocks048,
        TrackBlocks049,
        TrackBlocks050,
        TrackBlocks051,
        TrackBlocks052,
        TrackBlocks053,
        TrackBlocks054,
        TrackBlocks055,
        TrackBlocks056,
        TrackBlocks057,
        TrackBlocks058,
        TrackBlocks059,
        TrackBlocks060,
        TrackBlocks061,
        TrackBlocks062,
        TrackBlocks063,
        TrackBlocks064,
        TrackBlocks065,
        TrackBlocks066,
        TrackBlocks067,
        TrackBlocks068,
        TrackBlocks069,
        TrackBlocks070,
        TrackBlocks071,
        TrackBlocks072,
        TrackBlocks073,
        TrackBlocks074,
        TrackBlocks075,
        TrackBlocks076,
        TrackBlocks077,
        TrackBlocks078,
        TrackBlocks079,
        TrackBlocks080,
        TrackBlocks081,
        TrackBlocks082,
        TrackBlocks083,
        TrackBlocks084,
        TrackBlocks085,
        TrackBlocks086,
        TrackBlocks087,
        TrackBlocks088,
        TrackBlocks089,
        TrackBlocks090,
        TrackBlocks091,
        TrackBlocks092,
        TrackBlocks093,
        TrackBlocks094,
        TrackBlocks095,
        TrackBlocks096,
        TrackBlocks097,
        TrackBlocks098,
        TrackBlocks099,
        TrackBlocks100,
        TrackBlocks101,
        TrackBlocks102,
        TrackBlocks103,
        TrackBlocks104,
        TrackBlocks105,
        TrackBlocks106,
        TrackBlocks107,
        TrackBlocks108,
        TrackBlocks109,
        TrackBlocks110,
        TrackBlocks111,
        TrackBlocks112,
        TrackBlocks113,
        TrackBlocks114,
        TrackBlocks115,
        TrackBlocks116,
        TrackBlocks117,
        TrackBlocks118,
        TrackBlocks119,
        TrackBlocks120,
        TrackBlocks121,
        TrackBlocks122,
        TrackBlocks123,
        TrackBlocks124,
        TrackBlocks125,
        TrackBlocks126,
        TrackBlocks127,
        TrackBlocks128,
        TrackBlocks129,
        TrackBlocks130,
        TrackBlocks131,
        TrackBlocks132,
        TrackBlocks133,
        TrackBlocks134,
        TrackBlocks135,
        TrackBlocks136,
        TrackBlocks137,
        TrackBlocks138,
        TrackBlocks139,
        TrackBlocks140,
        TrackBlocks141,
        TrackBlocks142,
        TrackBlocks143,
        TrackBlocks144,
        TrackBlocks145,
        TrackBlocks146,
        TrackBlocks147,
        TrackBlocks148,
        TrackBlocks149,
        TrackBlocks150,
        TrackBlocks151,
        TrackBlocks152,
        TrackBlocks153,
        TrackBlocks154,
        TrackBlocks155,
        TrackBlocks156,
        TrackBlocks157,
        TrackBlocks158,
        TrackBlocks159,
        TrackBlocks160,
        TrackBlocks161,
        TrackBlocks162,
        TrackBlocks163,
        TrackBlocks164,
        TrackBlocks165,
        TrackBlocks166,
        TrackBlocks167,
        TrackBlocks168,
        TrackBlocks169,
        TrackBlocks170,
        TrackBlocks171,
        TrackBlocks172,
        TrackBlocks173,
        TrackBlocks174,
        TrackBlocks175,
        TrackBlocks176,
        TrackBlocks177,
        TrackBlocks178,
        TrackBlocks179,
        TrackBlocks180,
        TrackBlocks181,
        TrackBlocks182,
        TrackBlocks183,
        TrackBlocks184,
        TrackBlocks185,
        TrackBlocks186,
        TrackBlocks187,
        TrackBlocks188,
        TrackBlocks189,
        TrackBlocks190,
        TrackBlocks191,
        TrackBlocks192,
        TrackBlocks193,
        TrackBlocks194,
        TrackBlocks195,
        TrackBlocks196,
        TrackBlocks197,
        TrackBlocks198,
        TrackBlocks199,
        TrackBlocks200,
        TrackBlocks201,
        TrackBlocks202,
        TrackBlocks203,
        TrackBlocks204,
        TrackBlocks205,
        TrackBlocks206,
        TrackBlocks207,
        TrackBlocks208,
        TrackBlocks209,
        TrackBlocks210,
        TrackBlocks211,
        TrackBlocks212,
        TrackBlocks213,
        TrackBlocks214,
        TrackBlocks215,
        TrackBlocks216,
        TrackBlocks217,
        TrackBlocks218,
        TrackBlocks219,
        TrackBlocks220,
        TrackBlocks221,
        TrackBlocks222,
        TrackBlocks223,
        TrackBlocks224,
        TrackBlocks225,
        TrackBlocks226,
        TrackBlocks227,
        TrackBlocks228,
        TrackBlocks229,
        TrackBlocks230,
        TrackBlocks231,
        TrackBlocks232,
        TrackBlocks233,
        TrackBlocks234,
        TrackBlocks235,
        TrackBlocks236,
        TrackBlocks237,
        TrackBlocks238,
        TrackBlocks239,
        TrackBlocks240,
        TrackBlocks241,
        TrackBlocks242,
        TrackBlocks243,
        TrackBlocks244,
        TrackBlocks245,
        TrackBlocks246,
        TrackBlocks247,
        TrackBlocks248,
        TrackBlocks249,
        TrackBlocks250,
        TrackBlocks251,
        TrackBlocks252,
        TrackBlocks253,
        TrackBlocks254,
        TrackBlocks255,
        TrackBlocksRotationControlToggle,
    
        TrackBlocksFlatTrack1x4A,
        TrackBlocksFlatTrack2x2,
        TrackBlocksFlatTrack4x4,
        TrackBlocksFlatTrack2x4,
        TrackBlocksFlatTrack1x5,
        TrackBlocksFlatTrack1x1A,
        TrackBlocksFlatTrack1x4B,
        TrackBlocksFlatTrack1x1B,
        TrackBlocksFlatTrack1x4C,
        TrackBlocksFlatTrack3x3,
        TrackBlocksLeftLargeCorkscrewUp,
        TrackBlocksRightLargeCorkscrewUp,
        TrackBlocksLeftLargeCorkscrewDown,
        TrackBlocksRightLargeCorkscrewDown,
        TrackBlocksLeftMediumHalfLoopUp,
        TrackBlocksRightMediumHalfLoopUp,
        TrackBlocksLeftMediumHalfLoopDown,
        TrackBlocksRightMediumHalfLoopDown,
        TrackBlocksLeftZeroGRollUp,
        TrackBlocksRightZeroGRollUp,
        TrackBlocksLeftZeroGRollDown,
        TrackBlocksRightZeroGRollDown,
        TrackBlocksLeftLargeZeroGRollUp,
        TrackBlocksRightLargeZeroGRollUp,
        TrackBlocksLeftLargeZeroGRollDown,
        TrackBlocksRightLargeZeroGRollDown,
    
        TrackBlocksLeftFlyerLargeHalfLoopUninvertedUp,    // LeftFlyerLargeHalfLoopUninvertedUp
        TrackBlocksRightFlyerLargeHalfLoopUninvertedUp,   // RightFlyerLargeHalfLoopUninvertedUp
        TrackBlocksLeftFlyerLargeHalfLoopInvertedDown,    // LeftFlyerLargeHalfLoopInvertedDown
        TrackBlocksRightFlyerLargeHalfLoopInvertedDown,   // RightFlyerLargeHalfLoopInvertedDown
        TrackBlocksLeftFlyerLargeHalfLoopInvertedUp,      // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp
        TrackBlocksRightFlyerLargeHalfLoopInvertedUp,     // TrackElemType::RightFlyerLargeHalfLoopInvertedUp
        TrackBlocksLeftFlyerLargeHalfLoopUninvertedDown,  // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown
        TrackBlocksRightFlyerLargeHalfLoopUninvertedDown, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown
        TrackBlocksFlyerHalfLoopUpInverted,    // TrackElemType::FlyerHalfLoopInvertedUp
        TrackBlocksFlyerHalfLoopDownUpright,   // TrackElemType::FlyerHalfLoopUninvertedDown
        TrackBlocksLeftEighthToDiagUp25,          // TrackElemType::LeftEighthToDiagUp25          
        TrackBlocksRightEighthToDiagUp25,         // TrackElemType::RightEighthToDiagUp25        
        TrackBlocksLeftEighthToDiagDown25,        // TrackElemType::LeftEighthToDiagDown25       
        TrackBlocksRightEighthToDiagDown25,       // TrackElemType::RightEighthToDiagDown25      
        TrackBlocksLeftEighthToOrthogonalUp25,    // TrackElemType::LeftEighthToOrthogonalUp25   
        TrackBlocksRightEighthToOrthogonalUp25,   // TrackElemType::RightEighthToOrthogonalUp25  
        TrackBlocksLeftEighthToOrthogonalDown25,  // TrackElemType::LeftEighthToOrthogonalDown25 
        TrackBlocksRightEighthToOrthogonalDown25, // TrackElemType::RightEighthToOrthogonalDown25 
        TrackBlocks142,                           // TrackElemType::DiagUp25ToLeftBankedUp25
        TrackBlocks142,                           // TrackElemType::DiagUp25ToRightBankedUp25
        TrackBlocks142,                           // TrackElemType::DiagLeftBankedUp25ToUp25
        TrackBlocks142,                           // TrackElemType::DiagRightBankedUp25ToUp25
        TrackBlocks148,                           // TrackElemType::DiagDown25ToLeftBankedDown25
        TrackBlocks148,                           // TrackElemType::DiagDown25ToRightBankedDown25
        TrackBlocks148,                           // TrackElemType::DiagLeftBankedDown25ToDown25
        TrackBlocks148,                           // TrackElemType::DiagRightBankedDown25ToDown25
        TrackBlocks144,                           // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25
        TrackBlocks144,                           // TrackElemType::DiagRightBankedFlatToRightBankedUp25
        TrackBlocks147,                           // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat
        TrackBlocks147,                           // TrackElemType::DiagRightBankedUp25ToRightBankedFlat
        TrackBlocks150,                           // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25
        TrackBlocks150,                           // TrackElemType::DiagRightBankedFlatToRightBankedDown25
        TrackBlocks153,                           // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat
        TrackBlocks153,                           // TrackElemType::DiagRightBankedDown25ToRightBankedFlat
        TrackBlocks144,                           // TrackElemType::DiagFlatToLeftBankedUp25
        TrackBlocks144,                           // TrackElemType::DiagFlatToRightBankedUp25
        TrackBlocks147,                           // TrackElemType::DiagLeftBankedUp25ToFlat
        TrackBlocks147,                           // TrackElemType::DiagRightBankedUp25ToFlat
        TrackBlocks150,                           // TrackElemType::DiagFlatToLeftBankedDown25
        TrackBlocks150,                           // TrackElemType::DiagFlatToRightBankedDown25
        TrackBlocks153,                           // TrackElemType::DiagLeftBankedDown25ToFlat
        TrackBlocks153,                           // TrackElemType::DiagRightBankedDown25ToFlat
        TrackBlocks142,                           // TrackElemType::DiagUp25LeftBanked
        TrackBlocks142,                           // TrackElemType::DiagUp25RightBanked 
        TrackBlocks148,                           // TrackElemType::DiagDown25LeftBanked
        TrackBlocks148,                           // TrackElemType::DiagDown25RightBanked
        TrackBlocksLeftEighthToDiagUp25,          // TrackElemType::LeftEighthBankToDiagUp25
        TrackBlocksRightEighthToDiagUp25,         // TrackElemType::RightEighthBankToDiagUp25
        TrackBlocksLeftEighthToDiagDown25,        // TrackElemType::LeftEighthBankToDiagDown25
        TrackBlocksRightEighthToDiagDown25,       // TrackElemType::RightEighthBankToDiagDown25
        TrackBlocksLeftEighthToOrthogonalUp25,    // TrackElemType::LeftEighthBankToOrthogonalUp25
        TrackBlocksRightEighthToOrthogonalUp25,   // TrackElemType::RightEighthBankToOrthogonalUp25 
        TrackBlocksLeftEighthToOrthogonalDown25,  // TrackElemType::LeftEighthBankToOrthogonalDown25
        TrackBlocksRightEighthToOrthogonalDown25, // TrackElemType::RightEighthBankToOrthogonalDown25     
        TrackBlocks141,                           // TrackElemType::DiagBrakes
        TrackBlocks141,                           // TrackElemType::DiagBlockBrakes
    };
    
    static constexpr uint8_t TrackPieceLengths[] = {
        32,     // TrackElemType::Flat
        32,     // TrackElemType::EndStation
        32,     // TrackElemType::BeginStation
        32,     // TrackElemType::MiddleStation
        33,     // TrackElemType::Up25
        40,     // TrackElemType::Up60
        32,     // TrackElemType::FlatToUp25
        34,     // TrackElemType::Up25ToUp60
        34,     // TrackElemType::Up60ToUp25
        32,     // TrackElemType::Up25ToFlat
        33,     // TrackElemType::Down25
        40,     // TrackElemType::Down60
        32,     // TrackElemType::FlatToDown25
        34,     // TrackElemType::Down25ToDown60
        34,     // TrackElemType::Down60ToDown25
        32,     // TrackElemType::Down25ToFlat
        124,    // TrackElemType::LeftQuarterTurn5Tiles
        124,    // TrackElemType::RightQuarterTurn5Tiles
        32,     // TrackElemType::FlatToLeftBank
        32,     // TrackElemType::FlatToRightBank
        32,     // TrackElemType::LeftBankToFlat
        32,     // TrackElemType::RightBankToFlat
        124,    // TrackElemType::BankedLeftQuarterTurn5Tiles
        124,    // TrackElemType::BankedRightQuarterTurn5Tiles
        32,     // TrackElemType::LeftBankToUp25
        32,     // TrackElemType::RightBankToUp25
        32,     // TrackElemType::Up25ToLeftBank
        32,     // TrackElemType::Up25ToRightBank
        32,     // TrackElemType::LeftBankToDown25
        32,     // TrackElemType::RightBankToDown25
        32,     // TrackElemType::Down25ToLeftBank
        32,     // TrackElemType::Down25ToRightBank
        32,     // TrackElemType::LeftBank
        32,     // TrackElemType::RightBank
        130,    // TrackElemType::LeftQuarterTurn5TilesUp25
        130,    // TrackElemType::RightQuarterTurn5TilesUp25
        130,    // TrackElemType::LeftQuarterTurn5TilesDown25
        130,    // TrackElemType::RightQuarterTurn5TilesDown25
        96,     // TrackElemType::SBendLeft
        96,     // TrackElemType::SBendRight
        120,    // TrackElemType::LeftVerticalLoop
        120,    // TrackElemType::RightVerticalLoop
        75,     // TrackElemType::LeftQuarterTurn3Tiles
        75,     // TrackElemType::RightQuarterTurn3Tiles
        75,     // TrackElemType::LeftBankedQuarterTurn3Tiles
        75,     // TrackElemType::RightBankedQuarterTurn3Tiles
        77,     // TrackElemType::LeftQuarterTurn3TilesUp25
        77,     // TrackElemType::RightQuarterTurn3TilesUp25
        77,     // TrackElemType::LeftQuarterTurn3TilesDown25
        77,     // TrackElemType::RightQuarterTurn3TilesDown25
        24,     // TrackElemType::LeftQuarterTurn1Tile
        24,     // TrackElemType::RightQuarterTurn1Tile
        96,     // TrackElemType::LeftTwistDownToUp
        96,     // TrackElemType::RightTwistDownToUp
        96,     // TrackElemType::LeftTwistUpToDown
        96,     // TrackElemType::RightTwistUpToDown
        60,     // TrackElemType::HalfLoopUp
        60,     // TrackElemType::HalfLoopDown
        55,     // TrackElemType::LeftCorkscrewUp
        55,     // TrackElemType::RightCorkscrewUp
        55,     // TrackElemType::LeftCorkscrewDown
        55,     // TrackElemType::RightCorkscrewDown
        36,     // TrackElemType::FlatToUp60
        36,     // TrackElemType::Up60ToFlat
        36,     // TrackElemType::FlatToDown60
        36,     // TrackElemType::Down60ToFlat
        32,     // TrackElemType::TowerBase
        32,     // TrackElemType::TowerSection
        32,     // TrackElemType::FlatCovered
        33,     // TrackElemType::Up25Covered
        40,     // TrackElemType::Up60Covered
        32,     // TrackElemType::FlatToUp25Covered
        34,     // TrackElemType::Up25ToUp60Covered
        34,     // TrackElemType::Up60ToUp25Covered
        32,     // TrackElemType::Up25ToFlatCovered
        33,     // TrackElemType::Down25Covered
        40,     // TrackElemType::Down60Covered
        32,     // TrackElemType::FlatToDown25Covered
        34,     // TrackElemType::Down25ToDown60Covered
        34,     // TrackElemType::Down60ToDown25Covered
        32,     // TrackElemType::Down25ToFlatCovered
        124,    // TrackElemType::LeftQuarterTurn5TilesCovered
        124,    // TrackElemType::RightQuarterTurn5TilesCovered
        96,     // TrackElemType::SBendLeftCovered
        96,     // TrackElemType::SBendRightCovered
        75,     // TrackElemType::LeftQuarterTurn3TilesCovered
        75,     // TrackElemType::RightQuarterTurn3TilesCovered
        150,    // TrackElemType::LeftHalfBankedHelixUpSmall
        150,    // TrackElemType::RightHalfBankedHelixUpSmall
        150,    // TrackElemType::LeftHalfBankedHelixDownSmall
        150,    // TrackElemType::RightHalfBankedHelixDownSmall
        248,    // TrackElemType::LeftHalfBankedHelixUpLarge
        248,    // TrackElemType::RightHalfBankedHelixUpLarge
        248,    // TrackElemType::LeftHalfBankedHelixDownLarge
        248,    // TrackElemType::RightHalfBankedHelixDownLarge
        64,     // TrackElemType::LeftQuarterTurn1TileUp60
        64,     // TrackElemType::RightQuarterTurn1TileUp60
        64,     // TrackElemType::LeftQuarterTurn1TileDown60
        64,     // TrackElemType::RightQuarterTurn1TileDown60
        32,     // TrackElemType::Brakes
        32,     // TrackElemType::Booster
        32,     // TrackElemType::InvertedUp90ToFlatQuarterLoopAlias / Maze
        124,    // TrackElemType::LeftQuarterBankedHelixLargeUp
        124,    // TrackElemType::RightQuarterBankedHelixLargeUp
        124,    // TrackElemType::LeftQuarterBankedHelixLargeDown
        124,    // TrackElemType::RightQuarterBankedHelixLargeDown
        124,    // TrackElemType::LeftQuarterHelixLargeUp
        124,    // TrackElemType::RightQuarterHelixLargeUp
        124,    // TrackElemType::LeftQuarterHelixLargeDown
        124,    // TrackElemType::RightQuarterHelixLargeDown
        33,     // TrackElemType::Up25LeftBanked
        33,     // TrackElemType::Up25RightBanked
        32,     // TrackElemType::Waterfall
        32,     // TrackElemType::Rapids
        32,     // TrackElemType::OnRidePhoto
        33,     // TrackElemType::Down25LeftBanked
        33,     // TrackElemType::Down25RightBanked
        128,    // TrackElemType::Watersplash
        165,    // TrackElemType::FlatToUp60LongBase
        165,    // TrackElemType::Up60ToFlatLongBase
        32,     // TrackElemType::Whirlpool
        165,    // TrackElemType::Down60ToFlatLongBase
        165,    // TrackElemType::FlatToDown60LongBase
        138,    // TrackElemType::CableLiftHill
        32,     // TrackElemType::ReverseFreefallSlope
        32,     // TrackElemType::ReverseFreefallVertical
        32,     // TrackElemType::Up90
        32,     // TrackElemType::Down90
        32,     // TrackElemType::Up60ToUp90
        32,     // TrackElemType::Down90ToDown60
        32,     // TrackElemType::Up90ToUp60
        32,     // TrackElemType::Down60ToDown90
        32,     // TrackElemType::BrakeForDrop
        87,     // TrackElemType::LeftEighthToDiag
        87,     // TrackElemType::RightEighthToDiag
        87,     // TrackElemType::LeftEighthToOrthogonal
        87,     // TrackElemType::RightEighthToOrthogonal
        87,     // TrackElemType::LeftEighthBankToDiag
        87,     // TrackElemType::RightEighthBankToDiag
        87,     // TrackElemType::LeftEighthBankToOrthogonal
        87,     // TrackElemType::RightEighthBankToOrthogonal
        45,     // TrackElemType::DiagFlat
        45,     // TrackElemType::DiagUp25
        45,     // TrackElemType::DiagUp60
        45,     // TrackElemType::DiagFlatToUp25
        45,     // TrackElemType::DiagUp25ToUp60
        45,     // TrackElemType::DiagUp60ToUp25
        45,     // TrackElemType::DiagUp25ToFlat
        45,     // TrackElemType::DiagDown25
        45,     // TrackElemType::DiagDown60
        45,     // TrackElemType::DiagFlatToDown25
        45,     // TrackElemType::DiagDown25ToDown60
        45,     // TrackElemType::DiagDown60ToDown25
        45,     // TrackElemType::DiagDown25ToFlat
        45,     // TrackElemType::DiagFlatToUp60
        45,     // TrackElemType::DiagUp60ToFlat
        45,     // TrackElemType::DiagFlatToDown60
        45,     // TrackElemType::DiagDown60ToFlat
        45,     // TrackElemType::DiagFlatToLeftBank
        45,     // TrackElemType::DiagFlatToRightBank
        45,     // TrackElemType::DiagLeftBankToFlat
        45,     // TrackElemType::DiagRightBankToFlat
        45,     // TrackElemType::DiagLeftBankToUp25
        45,     // TrackElemType::DiagRightBankToUp25
        45,     // TrackElemType::DiagUp25ToLeftBank
        45,     // TrackElemType::DiagUp25ToRightBank
        45,     // TrackElemType::DiagLeftBankToDown25
        45,     // TrackElemType::DiagRightBankToDown25
        45,     // TrackElemType::DiagDown25ToLeftBank
        45,     // TrackElemType::DiagDown25ToRightBank
        45,     // TrackElemType::DiagLeftBank
        45,     // TrackElemType::DiagRightBank
        16,     // TrackElemType::LogFlumeReverser
        32,     // TrackElemType::SpinningTunnel
        96,     // TrackElemType::LeftBarrelRollUpToDown
        96,     // TrackElemType::RightBarrelRollUpToDown
        96,     // TrackElemType::LeftBarrelRollDownToUp
        96,     // TrackElemType::RightBarrelRollDownToUp
        64,     // TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25
        64,     // TrackElemType::RightBankToRightQuarterTurn3TilesUp25
        64,     // TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank
        64,     // TrackElemType::RightQuarterTurn3TilesDown25ToRightBank
        32,     // TrackElemType::PoweredLift
        100,    // TrackElemType::LeftLargeHalfLoopUp
        100,    // TrackElemType::RightLargeHalfLoopUp
        100,    // TrackElemType::LeftLargeHalfLoopDown
        100,    // TrackElemType::RightLargeHalfLoopDown
        96,     // TrackElemType::LeftFlyerTwistUp
        96,     // TrackElemType::RightFlyerTwistUp
        96,     // TrackElemType::LeftFlyerTwistDown
        96,     // TrackElemType::RightFlyerTwistDown
        64,     // TrackElemType::FlyerHalfLoopUninvertedUp
        64,     // TrackElemType::FlyerHalfLoopInvertedDown
        64,     // TrackElemType::LeftFlyerCorkscrewUp
        64,     // TrackElemType::RightFlyerCorkscrewUp
        64,     // TrackElemType::LeftFlyerCorkscrewDown
        64,     // TrackElemType::RightFlyerCorkscrewDown
        16,     // TrackElemType::HeartLineTransferUp
        16,     // TrackElemType::HeartLineTransferDown
        64,     // TrackElemType::LeftHeartLineRoll
        64,     // TrackElemType::RightHeartLineRoll
        32,     // TrackElemType::MinigolfHoleA
        32,     // TrackElemType::MinigolfHoleB
        32,     // TrackElemType::MinigolfHoleC
        32,     // TrackElemType::MinigolfHoleD
        32,     // TrackElemType::MinigolfHoleE
        80,     // TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop
        80,     // TrackElemType::Up90ToInvertedFlatQuarterLoop
        80,     // TrackElemType::InvertedFlatToDown90QuarterLoop
        64,     // TrackElemType::LeftCurvedLiftHill
        64,     // TrackElemType::RightCurvedLiftHill
        32,     // TrackElemType::LeftReverser
        32,     // TrackElemType::RightReverser
        32,     // TrackElemType::AirThrustTopCap
        32,     // TrackElemType::AirThrustVerticalDown
        32,     // TrackElemType::AirThrustVerticalDownToLevel
        32,     // TrackElemType::BlockBrakes
        32,     // TrackElemType::LeftBankedQuarterTurn3TileUp25
        32,     // TrackElemType::RightBankedQuarterTurn3TileUp25
        32,     // TrackElemType::LeftBankedQuarterTurn3TileDown25
        32,     // TrackElemType::RightBankedQuarterTurn3TileDown25
        32,     // TrackElemType::LeftBankedQuarterTurn5TileUp25
        32,     // TrackElemType::RightBankedQuarterTurn5TileUp25
        32,     // TrackElemType::LeftBankedQuarterTurn5TileDown25
        32,     // TrackElemType::RightBankedQuarterTurn5TileDown25
        32,     // TrackElemType::Up25ToLeftBankedUp25
        32,     // TrackElemType::Up25ToRightBankedUp25
        32,     // TrackElemType::LeftBankedUp25ToUp25
        32,     // TrackElemType::RightBankedUp25ToUp25
        32,     // TrackElemType::Down25ToLeftBankedDown25
        32,     // TrackElemType::Down25ToRightBankedDown25
        32,     // TrackElemType::LeftBankedDown25ToDown25
        32,     // TrackElemType::RightBankedDown25ToDown25
        32,     // TrackElemType::LeftBankedFlatToLeftBankedUp25
        32,     // TrackElemType::RightBankedFlatToRightBankedUp25
        32,     // TrackElemType::LeftBankedUp25ToLeftBankedFlat
        32,     // TrackElemType::RightBankedUp25ToRightBankedFlat
        32,     // TrackElemType::LeftBankedFlatToLeftBankedDown25
        32,     // TrackElemType::RightBankedFlatToRightBankedDown25
        32,     // TrackElemType::LeftBankedDown25ToLeftBankedFlat
        32,     // TrackElemType::RightBankedDown25ToRightBankedFlat
        32,     // TrackElemType::FlatToLeftBankedUp25
        32,     // TrackElemType::FlatToRightBankedUp25
        32,     // TrackElemType::LeftBankedUp25ToFlat
        32,     // TrackElemType::RightBankedUp25ToFlat
        32,     // TrackElemType::FlatToLeftBankedDown25
        32,     // TrackElemType::FlatToRightBankedDown25
        32,     // TrackElemType::LeftBankedDown25ToFlat
        32,     // TrackElemType::RightBankedDown25ToFlat
        32,     // TrackElemType::LeftQuarterTurn1TileUp90
        32,     // TrackElemType::RightQuarterTurn1TileUp90
        32,     // TrackElemType::LeftQuarterTurn1TileDown90
        32,     // TrackElemType::RightQuarterTurn1TileDown90
        80,     // TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop
        80,     // TrackElemType::MultiDimFlatToDown90QuarterLoop
        80,     // TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop
        32,     // TrackElemType::RotationControlToggle
        0,      // TrackElemType::FlatTrack1x4A
        0,      // TrackElemType::FlatTrack2x2
        0,      // TrackElemType::FlatTrack4x4
        0,      // TrackElemType::FlatTrack2x4
        0,      // TrackElemType::FlatTrack1x5
        0,      // TrackElemType::FlatTrack1x1A
        0,      // TrackElemType::FlatTrack1x4B
        0,      // TrackElemType::FlatTrack1x1B
        0,      // TrackElemType::FlatTrack1x4C
        0,      // TrackElemType::FlatTrack3x3
        96,     // TrackElemType::LeftCorkscrewUp
        96,     // TrackElemType::RightCorkscrewUp
        96,     // TrackElemType::LeftCorkscrewDown
        96,     // TrackElemType::RightCorkscrewDown
        80,     // TrackElemType::LeftMediumHalfLoopUp
        80,     // TrackElemType::RightMediumHalfLoopUp
        80,     // TrackElemType::LeftMediumHalfLoopDown
        80,     // TrackElemType::RightMediumHalfLoopDown
        96,     // TrackElemType::LeftZeroGRollUp
        96,     // TrackElemType::RightZeroGRollUp
        96,     // TrackElemType::LeftZeroGRollDown
        96,     // TrackElemType::RightZeroGRollDown
        165,    // TrackElemType::LeftLargeZeroGRollUp
        165,    // TrackElemType::RightLargeZeroGRollUp
        165,    // TrackElemType::LeftLargeZeroGRollDown
        165,    // TrackElemType::RightLargeZeroGRollDown
        100,    // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp
        100,    // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp
        100,    // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown
        100,    // TrackElemType::RightFlyerLargeHalfLoopInvertedDown
        100,    // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp
        100,    // TrackElemType::RightFlyerLargeHalfLoopInvertedUp
        100,    // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown
        100,    // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown
        64,     // TrackElemType::FlyerHalfLoopInvertedUp
        64,     // TrackElemType::FlyerHalfLoopUninvertedDown
        92, // TrackElemType::LeftEighthToDiagUp25          
        92, // TrackElemType::RightEighthToDiagUp25        
        92, // TrackElemType::LeftEighthToDiagDown25       
        92, // TrackElemType::RightEighthToDiagDown25      
        92, // TrackElemType::LeftEighthToOrthogonalUp25   
        92, // TrackElemType::RightEighthToOrthogonalUp25  
        92, // TrackElemType::LeftEighthToOrthogonalDown25 
        92, // TrackElemType::RightEighthToOrthogonalDown25 
        45, // TrackElemType::DiagUp25ToLeftBankedUp25
        45, // TrackElemType::DiagUp25ToRightBankedUp25
        45, // TrackElemType::DiagLeftBankedUp25ToUp25
        45, // TrackElemType::DiagRightBankedUp25ToUp25
        45, // TrackElemType::DiagDown25ToLeftBankedDown25
        45, // TrackElemType::DiagDown25ToRightBankedDown25
        45, // TrackElemType::DiagLeftBankedDown25ToDown25
        45, // TrackElemType::DiagRightBankedDown25ToDown25
        45, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25
        45, // TrackElemType::DiagRightBankedFlatToRightBankedUp25
        45, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat
        45, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat
        45, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25
        45, // TrackElemType::DiagRightBankedFlatToRightBankedDown25
        45, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat
        45, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat
        45, // TrackElemType::DiagFlatToLeftBankedUp25
        45, // TrackElemType::DiagFlatToRightBankedUp25
        45, // TrackElemType::DiagLeftBankedUp25ToFlat
        45, // TrackElemType::DiagRightBankedUp25ToFlat
        45, // TrackElemType::DiagFlatToLeftBankedDown25
        45, // TrackElemType::DiagFlatToRightBankedDown25
        45, // TrackElemType::DiagLeftBankedDown25ToFlat
        45, // TrackElemType::DiagRightBankedDown25ToFlat
        45, // TrackElemType::DiagUp25LeftBanked
        45, // TrackElemType::DiagUp25RightBanked 
        45, // TrackElemType::DiagDown25LeftBanked
        45, // TrackElemType::DiagDown25RightBanked
        92, // TrackElemType::LeftEighthBankToDiagUp25
        92, // TrackElemType::RightEighthBankToDiagUp25
        92, // TrackElemType::LeftEighthBankToDiagDown25
        92, // TrackElemType::RightEighthBankToDiagDown25
        92, // TrackElemType::LeftEighthBankToOrthogonalUp25
        92, // TrackElemType::RightEighthBankToOrthogonalUp25 
        92, // TrackElemType::LeftEighthBankToOrthogonalDown25
        92, // TrackElemType::RightEighthBankToOrthogonalDown25
        45, // TrackElemType::DiagBrakes
        45, // TrackElemType::DiagBlockBrakes
    };
    static_assert(std::size(TrackPieceLengths) == TrackElemType::Count);
    
    // rct2: 0x00998C95
    static constexpr TrackCurveChain gTrackCurveChain[] = {
        { TrackCurve::None, TrackCurve::None },
        { TrackElemType::EndStation, TrackElemType::EndStation },
        { TrackElemType::EndStation, TrackElemType::EndStation },
        { TrackElemType::EndStation, TrackElemType::EndStation },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::Left, TrackCurve::Left },
        { TrackCurve::Right, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::None },
        { TrackCurve::Right, TrackCurve::None },
        { TrackCurve::None, TrackCurve::Left },
        { TrackCurve::None, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::Left },
        { TrackCurve::Right, TrackCurve::Right },
        { TrackCurve::None, TrackCurve::Left },
        { TrackCurve::None, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::None },
        { TrackCurve::Right, TrackCurve::None },
        { TrackCurve::None, TrackCurve::Left },
        { TrackCurve::None, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::None },
        { TrackCurve::Right, TrackCurve::None },
        { TrackCurve::Left, TrackCurve::Left },
        { TrackCurve::Right, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::Left },
        { TrackCurve::Right, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::Left },
        { TrackCurve::Right, TrackCurve::Right },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::LeftSmall, TrackCurve::LeftSmall },
        { TrackCurve::RightSmall, TrackCurve::RightSmall },
        { TrackCurve::LeftSmall, TrackCurve::LeftSmall },
        { TrackCurve::RightSmall, TrackCurve::RightSmall },
        { TrackCurve::LeftSmall, TrackCurve::LeftSmall },
        { TrackCurve::RightSmall, TrackCurve::RightSmall },
        { TrackCurve::LeftSmall, TrackCurve::LeftSmall },
        { TrackCurve::RightSmall, TrackCurve::RightSmall },
        { TrackCurve::LeftVerySmall, TrackCurve::LeftVerySmall },
        { TrackCurve::RightVerySmall, TrackCurve::RightVerySmall },
        { TrackElemType::LeftTwistUpToDown, TrackCurve::None },
        { TrackElemType::RightTwistUpToDown, TrackCurve::None },
        { TrackCurve::None, TrackElemType::LeftTwistDownToUp },
        { TrackCurve::None, TrackElemType::RightTwistDownToUp },
        { TrackElemType::HalfLoopDown, TrackCurve::None },
        { TrackCurve::None, TrackElemType::HalfLoopUp },
        { TrackElemType::RightCorkscrewDown, TrackCurve::None },
        { TrackElemType::LeftCorkscrewDown, TrackCurve::None },
        { TrackCurve::None, TrackElemType::RightCorkscrewUp },
        { TrackCurve::None, TrackElemType::LeftCorkscrewUp },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackElemType::TowerSection, TrackCurve::None },
        { TrackElemType::TowerSection, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::Left, TrackCurve::Left },
        { TrackCurve::Right, TrackCurve::Right },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::LeftSmall, TrackCurve::LeftSmall },
        { TrackCurve::RightSmall, TrackCurve::RightSmall },
        { TrackElemType::LeftHalfBankedHelixUpSmall, TrackElemType::LeftHalfBankedHelixUpSmall },
        { TrackElemType::RightHalfBankedHelixUpSmall, TrackElemType::RightHalfBankedHelixUpSmall },
        { TrackElemType::LeftHalfBankedHelixDownSmall, TrackElemType::LeftHalfBankedHelixDownSmall },
        { TrackElemType::RightHalfBankedHelixDownSmall, TrackElemType::RightHalfBankedHelixDownSmall },
        { TrackElemType::LeftHalfBankedHelixUpLarge, TrackElemType::LeftHalfBankedHelixUpLarge },
        { TrackElemType::RightHalfBankedHelixUpLarge, TrackElemType::RightHalfBankedHelixUpLarge },
        { TrackElemType::LeftHalfBankedHelixDownLarge, TrackElemType::LeftHalfBankedHelixDownLarge },
        { TrackElemType::RightHalfBankedHelixDownLarge, TrackElemType::RightHalfBankedHelixDownLarge },
        { TrackCurve::LeftSmall, TrackCurve::LeftSmall },
        { TrackCurve::RightSmall, TrackCurve::RightSmall },
        { TrackCurve::LeftSmall, TrackCurve::LeftSmall },
        { TrackCurve::RightSmall, TrackCurve::RightSmall },
        { TrackElemType::Brakes, TrackElemType::Brakes },
        { TrackElemType::Booster, TrackElemType::Booster },
        { TrackCurve::None, TrackCurve::None },
        { TrackElemType::LeftQuarterBankedHelixLargeUp, TrackElemType::LeftQuarterBankedHelixLargeUp },
        { TrackElemType::RightQuarterBankedHelixLargeUp, TrackElemType::RightQuarterBankedHelixLargeUp },
        { TrackElemType::LeftQuarterBankedHelixLargeDown, TrackElemType::LeftQuarterBankedHelixLargeDown },
        { TrackElemType::RightQuarterBankedHelixLargeDown, TrackElemType::RightQuarterBankedHelixLargeDown },
        { TrackElemType::LeftQuarterHelixLargeUp, TrackElemType::LeftQuarterHelixLargeUp },
        { TrackElemType::RightQuarterHelixLargeUp, TrackElemType::RightQuarterHelixLargeUp },
        { TrackElemType::LeftQuarterHelixLargeDown, TrackElemType::LeftQuarterHelixLargeDown },
        { TrackElemType::RightQuarterHelixLargeDown, TrackElemType::RightQuarterHelixLargeDown },
        { TrackCurve::Left, TrackCurve::Left },
        { TrackCurve::Right, TrackCurve::Right },
        { TrackElemType::Waterfall, TrackElemType::Waterfall },
        { TrackElemType::Rapids, TrackElemType::Rapids },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::Left, TrackCurve::Left },
        { TrackCurve::Right, TrackCurve::Right },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackElemType::ReverseFreefallVertical, TrackCurve::None },
        { TrackElemType::ReverseFreefallVertical, TrackElemType::ReverseFreefallVertical },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },
        { TrackCurve::RightLarge, TrackCurve::RightLarge },
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },
        { TrackCurve::RightLarge, TrackCurve::RightLarge },
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },
        { TrackCurve::RightLarge, TrackCurve::RightLarge },
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },
        { TrackCurve::RightLarge, TrackCurve::RightLarge },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::LeftLarge, TrackCurve::None },
        { TrackCurve::RightLarge, TrackCurve::None },
        { TrackCurve::None, TrackCurve::LeftLarge },
        { TrackCurve::None, TrackCurve::RightLarge },
        { TrackCurve::None, TrackCurve::LeftLarge },
        { TrackCurve::None, TrackCurve::RightLarge },
        { TrackCurve::LeftLarge, TrackCurve::None },
        { TrackCurve::RightLarge, TrackCurve::None },
        { TrackCurve::None, TrackCurve::LeftLarge },
        { TrackCurve::None, TrackCurve::RightLarge },
        { TrackCurve::LeftLarge, TrackCurve::None },
        { TrackCurve::RightLarge, TrackCurve::None },
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },
        { TrackCurve::RightLarge, TrackCurve::RightLarge },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackElemType::LeftBarrelRollDownToUp, TrackCurve::None },
        { TrackElemType::RightBarrelRollDownToUp, TrackCurve::None },
        { TrackCurve::None, TrackElemType::LeftBarrelRollUpToDown },
        { TrackCurve::None, TrackElemType::RightBarrelRollUpToDown },
        { TrackCurve::LeftSmall, TrackCurve::LeftSmall },
        { TrackCurve::RightSmall, TrackCurve::RightSmall },
        { TrackCurve::LeftSmall, TrackCurve::LeftSmall },
        { TrackCurve::RightSmall, TrackCurve::RightSmall },
        { TrackElemType::PoweredLift, TrackElemType::PoweredLift },
        { TrackElemType::RightLargeHalfLoopDown, TrackCurve::None },
        { TrackElemType::LeftLargeHalfLoopDown, TrackCurve::None },
        { TrackCurve::None, TrackElemType::RightLargeHalfLoopUp },
        { TrackCurve::None, TrackElemType::LeftLargeHalfLoopUp },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackElemType::InvertedFlatToDown90QuarterLoop, TrackCurve::None },
        { TrackCurve::None, TrackElemType::Up90ToInvertedFlatQuarterLoop },
        { TrackElemType::LeftCurvedLiftHill, TrackElemType::LeftCurvedLiftHill },
        { TrackElemType::RightCurvedLiftHill, TrackElemType::RightCurvedLiftHill },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackElemType::AirThrustVerticalDown, TrackElemType::ReverseFreefallVertical },
        { TrackElemType::AirThrustVerticalDown, TrackElemType::AirThrustVerticalDown },
        { TrackCurve::None, TrackElemType::AirThrustVerticalDown },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::LeftSmall, TrackCurve::LeftSmall },
        { TrackCurve::RightSmall, TrackCurve::RightSmall },
        { TrackCurve::LeftSmall, TrackCurve::LeftSmall },
        { TrackCurve::RightSmall, TrackCurve::RightSmall },
        { TrackCurve::Left, TrackCurve::Left },
        { TrackCurve::Right, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::Left },
        { TrackCurve::Right, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::None },
        { TrackCurve::Right, TrackCurve::None },
        { TrackCurve::None, TrackCurve::Left },
        { TrackCurve::None, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::None },
        { TrackCurve::Right, TrackCurve::None },
        { TrackCurve::None, TrackCurve::Left },
        { TrackCurve::None, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::Left },
        { TrackCurve::Right, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::Left },
        { TrackCurve::Right, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::Left },
        { TrackCurve::Right, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::Left },
        { TrackCurve::Right, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::None },
        { TrackCurve::Right, TrackCurve::None },
        { TrackCurve::None, TrackCurve::Left },
        { TrackCurve::None, TrackCurve::Right },
        { TrackCurve::Left, TrackCurve::None },
        { TrackCurve::Right, TrackCurve::None },
        { TrackCurve::None, TrackCurve::Left },
        { TrackCurve::None, TrackCurve::Right },
        { TrackCurve::LeftSmall, TrackCurve::LeftSmall },
        { TrackCurve::RightSmall, TrackCurve::RightSmall },
        { TrackCurve::LeftSmall, TrackCurve::LeftSmall },
        { TrackCurve::RightSmall, TrackCurve::RightSmall },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackCurve::None, TrackCurve::None },
        { TrackElemType::None, TrackElemType::None },                       // TrackElemType::FlatTrack1x4A
        { TrackCurve::None, TrackCurve::None }, // TrackElemType::FlatTrack2x2
        { TrackCurve::None, TrackCurve::None }, // TrackElemType::FlatTrack4x4
        { TrackElemType::None, TrackElemType::None },                       // TrackElemType::FlatTrack2x4
        { TrackElemType::None, TrackElemType::None },                       // TrackElemType::FlatTrack1x5
        { TrackElemType::None, TrackElemType::None },                       // TrackElemType::FlatTrack1x1A
        { TrackElemType::None, TrackElemType::None },                       // TrackElemType::FlatTrack1x4B
        { TrackElemType::None, TrackElemType::None },                       // TrackElemType::FlatTrack1x1B
        { TrackElemType::None, TrackElemType::None },                       // TrackElemType::FlatTrack1x4C
        { TrackElemType::None, TrackElemType::None },                       // TrackElemType::FlatTrack3x3
        { TrackElemType::RightLargeCorkscrewDown, TrackCurve::None }, // TrackElemType::LeftLargeCorkscrewUp
        { TrackElemType::LeftLargeCorkscrewDown, TrackCurve::None },  // TrackElemType::RightLargeCorkscrewUp
        { TrackCurve::None, TrackElemType::RightLargeCorkscrewUp },   // TrackElemType::LeftLargeCorkscrewDown
        { TrackCurve::None, TrackElemType::LeftLargeCorkscrewUp },    // TrackElemType::RightCorkscrewDown
        { TrackElemType::RightMediumHalfLoopDown, TrackCurve::None }, // TrackElemType::LeftMediumHalfLoopUp
        { TrackElemType::LeftMediumHalfLoopDown, TrackCurve::None },  // TrackElemType::RightMediumHalfLoopUp
        { TrackCurve::None, TrackElemType::RightMediumHalfLoopUp },   // TrackElemType::LeftMediumHalfLoopDown
        { TrackCurve::None, TrackElemType::LeftMediumHalfLoopUp },    // TrackElemType::RightMediumHalfLoopDown
        { TrackElemType::LeftZeroGRollDown, TrackCurve::None },       // TrackElemType::LeftZeroGRollUp
        { TrackElemType::RightZeroGRollDown, TrackCurve::None },      // TrackElemType::RightZeroGRollUp
        { TrackCurve::None, TrackElemType::LeftZeroGRollUp },         // TrackElemType::LeftZeroGRollDown
        { TrackCurve::None, TrackElemType::RightZeroGRollUp },        // TrackElemType::RightZeroGRollDown
        { TrackElemType::LeftLargeZeroGRollDown, TrackCurve::None },  // TrackElemType::LeftLargeZeroGRollUp
        { TrackElemType::RightLargeZeroGRollDown, TrackCurve::None }, // TrackElemType::RightLargeZeroGRollUp
        { TrackCurve::None, TrackElemType::LeftLargeZeroGRollUp },    // TrackElemType::LeftLargeZeroGRollDown
        { TrackCurve::None, TrackElemType::RightLargeZeroGRollUp },   // TrackElemType::RightLargeZeroGRollDown
        { TrackElemType::RightFlyerLargeHalfLoopInvertedDown, TrackCurve::None },   // LeftFlyerLargeHalfLoopUninvertedUp
        { TrackElemType::LeftFlyerLargeHalfLoopInvertedDown, TrackCurve::None },    // RightFlyerLargeHalfLoopUninvertedUp
        { TrackCurve::None, TrackElemType::RightFlyerLargeHalfLoopUninvertedUp },   // LeftFlyerLargeHalfLoopInvertedDown
        { TrackCurve::None, TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp },    // RightFlyerLargeHalfLoopInvertedDown
        { TrackElemType::RightFlyerLargeHalfLoopUninvertedDown, TrackCurve::None },  // LeftFlyerLargeHalfLoopInvertedUp
        { TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown, TrackCurve::None },  // RightFlyerLargeHalfLoopInvertedUp
        { TrackCurve::None, TrackElemType::RightFlyerLargeHalfLoopInvertedUp },     // LeftFlyerLargeHalfLoopUninvertedDown
        { TrackCurve::None, TrackElemType::LeftFlyerLargeHalfLoopInvertedUp },      // RightFlyerLargeHalfLoopUninvertedDown
        { TrackCurve::None, TrackCurve::None }, // FlyerHalfLoopInvertedUp
        { TrackCurve::None, TrackCurve::None }, // FlyerHalfLoopUninvertedUp
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::LeftEighthToDiagUp25         
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::RightEighthToDiagUp25        
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::LeftEighthToDiagDown25       
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::RightEighthToDiagDown25      
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::LeftEighthToOrthogonalUp25   
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::RightEighthToOrthogonalUp25  
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::LeftEighthToOrthogonalDown25 
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::RightEighthToOrthogonalDown25
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::DiagUp25ToLeftBankedUp25
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::DiagUp25ToRightBankedUp25
        { TrackCurve::None, TrackCurve::None },               // TrackElemType::DiagLeftBankedUp25ToUp25
        { TrackCurve::None, TrackCurve::None },               // TrackElemType::DiagRightBankedUp25ToUp25
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::DiagDown25ToLeftBankedDown25
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::DiagDown25ToRightBankedDown25
        { TrackCurve::None, TrackCurve::None },               // TrackElemType::DiagLeftBankedDown25ToDown25
        { TrackCurve::None, TrackCurve::None },               // TrackElemType::DiagRightBankedDown25ToDown25
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::DiagFlatToLeftBankedUp25
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::DiagFlatToRightBankedUp25
        { TrackCurve::None, TrackCurve::None },               // TrackElemType::DiagLeftBankedUp25ToFlat
        { TrackCurve::None, TrackCurve::None },               // TrackElemType::DiagRightBankedUp25ToFlat
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::DiagFlatToLeftBankedDown25
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::DiagFlatToRightBankedDown25
        { TrackCurve::None, TrackCurve::None },               // TrackElemType::DiagLeftBankedDown25ToFlat
        { TrackCurve::None, TrackCurve::None },               // TrackElemType::DiagRightBankedDown25ToFlat
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::DiagUp25LeftBanked
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::DiagUp25RightBanked 
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::DiagDown25LeftBanked
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::DiagDown25RightBanked
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::LeftEighthBankToDiagUp25
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::RightEighthBankToDiagUp25
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::LeftEighthBankToDiagDown25
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::RightEighthBankToDiagDown25
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::LeftEighthBankToOrthogonalUp25
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::RightEighthBankToOrthogonalUp25 
        { TrackCurve::LeftLarge, TrackCurve::LeftLarge },   // TrackElemType::LeftEighthBankToOrthogonalDown25
        { TrackCurve::RightLarge, TrackCurve::RightLarge }, // TrackElemType::RightEighthBankToOrthogonalDown25     
        { TrackElemType::DiagBrakes, TrackElemType::DiagBrakes }, // TrackElemType::DiagBrakes
        { TrackCurve::None, TrackCurve::None }, // TrackElemType::DiagBlockBrakes
    };
    static_assert(std::size(gTrackCurveChain) == TrackElemType::Count);
    
    const TrackDescriptor gTrackDescriptors[186] = {
        {   true,   TrackPitch::Down60,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down60,    TrackRoll::None,    TrackElemType::DiagDown60                                     },
        {   true,   TrackPitch::Down60,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::DiagDown60ToDown25                      },
        {   true,   TrackPitch::Down60,    TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::DiagDown60ToFlat                             },
        {   true,   TrackPitch::Down25,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down60,    TrackRoll::None,    TrackElemType::DiagDown25ToDown60                      },
        {   true,   TrackPitch::Down25,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::DiagDown25                                     },
        {   true,   TrackPitch::Down25,    TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Left,    TrackElemType::DiagDown25ToLeftBank                        },
        {   true,   TrackPitch::Down25,    TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::DiagDown25ToFlat                             },
        {   true,   TrackPitch::Down25,    TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Right,   TrackElemType::DiagDown25ToRightBank                       },
        {   true,   TrackPitch::None,       TrackRoll::Left,    TrackCurve::LeftLarge,         TrackPitch::None,       TrackRoll::Left,    TrackElemType::LeftEighthBankToOrthogonal                       },
        {   true,   TrackPitch::None,       TrackRoll::Left,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::DiagLeftBankToDown25                        },
        {   true,   TrackPitch::None,       TrackRoll::Left,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Left,    TrackElemType::DiagLeftBank                                       },
        {   true,   TrackPitch::None,       TrackRoll::Left,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::DiagLeftBankToFlat                               },
        {   true,   TrackPitch::None,       TrackRoll::Left,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::DiagLeftBankToUp25                          },
        {   true,   TrackPitch::None,       TrackRoll::None,    TrackCurve::LeftLarge,         TrackPitch::None,       TrackRoll::None,    TrackElemType::LeftEighthToOrthogonal                            },
        {   true,   TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Down60,    TrackRoll::None,    TrackElemType::DiagFlatToDown60                             },
        {   true,   TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::DiagFlatToDown25                             },
        {   true,   TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Left,    TrackElemType::DiagFlatToLeftBank                               },
        {   true,   TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::DiagFlat                                            },
        {   true,   TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Right,   TrackElemType::DiagFlatToRightBank                              },
        {   true,   TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::DiagFlatToUp25                               },
        {   true,   TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Up60,      TrackRoll::None,    TrackElemType::DiagFlatToUp60                               },
        {   true,   TrackPitch::None,       TrackRoll::None,    TrackCurve::RightLarge,        TrackPitch::None,       TrackRoll::None,    TrackElemType::RightEighthToOrthogonal                           },
        {   true,   TrackPitch::None,       TrackRoll::Right,   TrackCurve::None,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::DiagRightBankToDown25                       },
        {   true,   TrackPitch::None,       TrackRoll::Right,   TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::DiagRightBankToFlat                              },
        {   true,   TrackPitch::None,       TrackRoll::Right,   TrackCurve::None,               TrackPitch::None,       TrackRoll::Right,   TrackElemType::DiagRightBank                                      },
        {   true,   TrackPitch::None,       TrackRoll::Right,   TrackCurve::None,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::DiagRightBankToUp25                         },
        {   true,   TrackPitch::None,       TrackRoll::Right,   TrackCurve::RightLarge,        TrackPitch::None,       TrackRoll::Right,   TrackElemType::RightEighthBankToOrthogonal                      },
        {   true,   TrackPitch::Up25,      TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Left,    TrackElemType::DiagUp25ToLeftBank                          },
        {   true,   TrackPitch::Up25,      TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::DiagUp25ToFlat                               },
        {   true,   TrackPitch::Up25,      TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Right,   TrackElemType::DiagUp25ToRightBank                         },
        {   true,   TrackPitch::Up25,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::DiagUp25                                       },
        {   true,   TrackPitch::Up25,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up60,      TrackRoll::None,    TrackElemType::DiagUp25ToUp60                          },
        {   true,   TrackPitch::Up60,      TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::DiagUp60ToFlat                               },
        {   true,   TrackPitch::Up60,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::DiagUp60ToUp25                          },
        {   true,   TrackPitch::Up60,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up60,      TrackRoll::None,    TrackElemType::DiagUp60                                       },
        {   false,  TrackPitch::Down90,    TrackRoll::None,    TrackCurve::LeftSmall,         TrackPitch::Down90,    TrackRoll::None,    TrackElemType::LeftQuarterTurn1TileDown90                 },
        {   false,  TrackPitch::Down90,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down90,    TrackRoll::None,    TrackElemType::Down90                                          },
        {   false,  TrackPitch::Down90,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down60,    TrackRoll::None,    TrackElemType::Down90ToDown60                           },
        {   false,  TrackPitch::Down90,    TrackRoll::None,    TrackCurve::RightSmall,        TrackPitch::Down90,    TrackRoll::None,    TrackElemType::RightQuarterTurn1TileDown90                },
        {   false,  TrackPitch::Down60,    TrackRoll::None,    TrackCurve::LeftSmall,         TrackPitch::Down60,    TrackRoll::None,    TrackElemType::LeftQuarterTurn1TileDown60                 },
        {   false,  TrackPitch::Down60,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down90,    TrackRoll::None,    TrackElemType::Down60ToDown90                           },
        {   false,  TrackPitch::Down60,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down60,    TrackRoll::None,    TrackElemType::Down60                                          },
        {   false,  TrackPitch::Down60,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::Down60ToDown25                           },
        {   false,  TrackPitch::Down60,    TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::Down60ToFlat                                  },
        {   false,  TrackPitch::Down60,    TrackRoll::None,    TrackCurve::RightSmall,        TrackPitch::Down60,    TrackRoll::None,    TrackElemType::RightQuarterTurn1TileDown60                },
        {   false,  TrackPitch::Down25,    TrackRoll::Left,    TrackCurve::LeftSmall,         TrackPitch::Down25,    TrackRoll::Left,    TrackElemType::LeftBankedQuarterTurn3TileDown25          },
        {   false,  TrackPitch::Down25,    TrackRoll::Left,    TrackCurve::Left,               TrackPitch::Down25,    TrackRoll::Left,    TrackElemType::LeftBankedQuarterTurn5TileDown25          },
        {   false,  TrackPitch::Down25,    TrackRoll::Left,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Left,    TrackElemType::Down25LeftBanked                              },
        {   false,  TrackPitch::Down25,    TrackRoll::Left,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::LeftBankedDown25ToDown25               },
        {   false,  TrackPitch::Down25,    TrackRoll::Left,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Left,    TrackElemType::LeftBankedDown25ToLeftBankedFlat          },
        {   false,  TrackPitch::Down25,    TrackRoll::Left,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::LeftBankedDown25ToFlat                      },
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::LeftSmall,         TrackPitch::Down25,    TrackRoll::None,    TrackElemType::LeftQuarterTurn3TilesDown25                },
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::LeftSmall,         TrackPitch::None,       TrackRoll::Left,    TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank   },
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::Left,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::LeftQuarterTurn5TilesDown25                },
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down60,    TrackRoll::None,    TrackElemType::Down25ToDown60                           },
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Left,    TrackElemType::Down25ToLeftBankedDown25               },
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::Down25                                          },
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Right,   TrackElemType::Down25ToRightBankedDown25              },
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Left,    TrackElemType::Down25ToLeftBank                             },
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::Down25ToFlat                                  },
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Right,   TrackElemType::Down25ToRightBank                            },
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::Right,              TrackPitch::Down25,    TrackRoll::None,    TrackElemType::RightQuarterTurn5TilesDown25               },
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::RightSmall,        TrackPitch::None,       TrackRoll::Right,   TrackElemType::RightQuarterTurn3TilesDown25ToRightBank },
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::RightSmall,        TrackPitch::Down25,    TrackRoll::None,    TrackElemType::RightQuarterTurn3TilesDown25               },
        {   false,  TrackPitch::Down25,    TrackRoll::Right,   TrackCurve::None,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::RightBankedDown25ToDown25              },
        {   false,  TrackPitch::Down25,    TrackRoll::Right,   TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Right,   TrackElemType::Down25RightBanked                             },
        {   false,  TrackPitch::Down25,    TrackRoll::Right,   TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::RightBankedDown25ToFlat                     },
        {   false,  TrackPitch::Down25,    TrackRoll::Right,   TrackCurve::None,               TrackPitch::None,       TrackRoll::Right,   TrackElemType::RightBankedDown25ToRightBankedFlat        },
        {   false,  TrackPitch::Down25,    TrackRoll::Right,   TrackCurve::Right,              TrackPitch::Down25,    TrackRoll::Right,   TrackElemType::RightBankedQuarterTurn5TileDown25         },
        {   false,  TrackPitch::Down25,    TrackRoll::Right,   TrackCurve::RightSmall,        TrackPitch::Down25,    TrackRoll::Right,   TrackElemType::RightBankedQuarterTurn3TileDown25         },
        {   false,  TrackPitch::None,       TrackRoll::Left,    TrackCurve::LeftSmall,         TrackPitch::None,       TrackRoll::Left,    TrackElemType::LeftBankedQuarterTurn3Tiles                       },
        {   false,  TrackPitch::None,       TrackRoll::Left,    TrackCurve::LeftSmall,         TrackPitch::Up25,      TrackRoll::None,    TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25     },
        {   false,  TrackPitch::None,       TrackRoll::Left,    TrackCurve::Left,               TrackPitch::None,       TrackRoll::Left,    TrackElemType::BankedLeftQuarterTurn5Tiles                     },
        {   false,  TrackPitch::None,       TrackRoll::Left,    TrackCurve::LeftLarge,         TrackPitch::None,       TrackRoll::Left,    TrackElemType::LeftEighthBankToDiag                             },
        {   false,  TrackPitch::None,       TrackRoll::Left,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Left,    TrackElemType::LeftBankedFlatToLeftBankedDown25          },
        {   false,  TrackPitch::None,       TrackRoll::Left,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::LeftBankToDown25                             },
        {   false,  TrackPitch::None,       TrackRoll::Left,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Left,    TrackElemType::LeftBank                                            },
        {   false,  TrackPitch::None,       TrackRoll::Left,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::LeftBankToFlat                                    },
        {   false,  TrackPitch::None,       TrackRoll::Left,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Left,    TrackElemType::LeftBankedFlatToLeftBankedUp25            },
        {   false,  TrackPitch::None,       TrackRoll::Left,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::LeftBankToUp25                               },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::LeftSmall,         TrackPitch::None,       TrackRoll::None,    TrackElemType::LeftQuarterTurn3Tiles                            },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::Left,               TrackPitch::None,       TrackRoll::None,    TrackElemType::LeftQuarterTurn5Tiles                            },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::LeftLarge,         TrackPitch::None,       TrackRoll::None,    TrackElemType::LeftEighthToDiag                                  },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Down60,    TrackRoll::None,    TrackElemType::FlatToDown60                                  },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Left,    TrackElemType::FlatToLeftBankedDown25                      },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::FlatToDown25                                  },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Right,   TrackElemType::FlatToRightBankedDown25                     },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Left,    TrackElemType::FlatToLeftBank                                    },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::Flat                                                 },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::LeftVerySmall,    TrackPitch::None,       TrackRoll::None,    TrackElemType::LeftQuarterTurn1Tile                             },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::RightVerySmall,   TrackPitch::None,       TrackRoll::None,    TrackElemType::RightQuarterTurn1Tile                            },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Right,   TrackElemType::FlatToRightBank                                   },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Left,    TrackElemType::FlatToLeftBankedUp25                        },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::FlatToUp25                                    },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Right,   TrackElemType::FlatToRightBankedUp25                       },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Up60,      TrackRoll::None,    TrackElemType::FlatToUp60                                    },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::RightLarge,        TrackPitch::None,       TrackRoll::None,    TrackElemType::RightEighthToDiag                                 },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::Right,              TrackPitch::None,       TrackRoll::None,    TrackElemType::RightQuarterTurn5Tiles                           },
        {   false,  TrackPitch::None,       TrackRoll::None,    TrackCurve::RightSmall,        TrackPitch::None,       TrackRoll::None,    TrackElemType::RightQuarterTurn3Tiles                           },
        {   false,  TrackPitch::None,       TrackRoll::Right,   TrackCurve::None,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::RightBankToDown25                            },
        {   false,  TrackPitch::None,       TrackRoll::Right,   TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Right,   TrackElemType::RightBankedFlatToRightBankedDown25        },
        {   false,  TrackPitch::None,       TrackRoll::Right,   TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::RightBankToFlat                                   },
        {   false,  TrackPitch::None,       TrackRoll::Right,   TrackCurve::None,               TrackPitch::None,       TrackRoll::Right,   TrackElemType::RightBank                                           },
        {   false,  TrackPitch::None,       TrackRoll::Right,   TrackCurve::None,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::RightBankToUp25                              },
        {   false,  TrackPitch::None,       TrackRoll::Right,   TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Right,   TrackElemType::RightBankedFlatToRightBankedUp25          },
        {   false,  TrackPitch::None,       TrackRoll::Right,   TrackCurve::RightLarge,        TrackPitch::None,       TrackRoll::Right,   TrackElemType::RightEighthBankToDiag                            },
        {   false,  TrackPitch::None,       TrackRoll::Right,   TrackCurve::Right,              TrackPitch::None,       TrackRoll::Right,   TrackElemType::BankedRightQuarterTurn5Tiles                    },
        {   false,  TrackPitch::None,       TrackRoll::Right,   TrackCurve::RightSmall,        TrackPitch::None,       TrackRoll::Right,   TrackElemType::RightBankedQuarterTurn3Tiles                      },
        {   false,  TrackPitch::None,       TrackRoll::Right,   TrackCurve::RightSmall,        TrackPitch::Up25,      TrackRoll::None,    TrackElemType::RightBankToRightQuarterTurn3TilesUp25   },
        {   false,  TrackPitch::Up25,      TrackRoll::Left,    TrackCurve::LeftSmall,         TrackPitch::Up25,      TrackRoll::Left,    TrackElemType::LeftBankedQuarterTurn3TileUp25            },
        {   false,  TrackPitch::Up25,      TrackRoll::Left,    TrackCurve::Left,               TrackPitch::Up25,      TrackRoll::Left,    TrackElemType::LeftBankedQuarterTurn5TileUp25            },
        {   false,  TrackPitch::Up25,      TrackRoll::Left,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Left,    TrackElemType::LeftBankedUp25ToLeftBankedFlat            },
        {   false,  TrackPitch::Up25,      TrackRoll::Left,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::LeftBankedUp25ToFlat                        },
        {   false,  TrackPitch::Up25,      TrackRoll::Left,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Left,    TrackElemType::Up25LeftBanked                                },
        {   false,  TrackPitch::Up25,      TrackRoll::Left,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::LeftBankedUp25ToUp25                   },
        {   false,  TrackPitch::Up25,      TrackRoll::None,    TrackCurve::LeftSmall,         TrackPitch::Up25,      TrackRoll::None,    TrackElemType::LeftQuarterTurn3TilesUp25                  },
        {   false,  TrackPitch::Up25,      TrackRoll::None,    TrackCurve::Left,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::LeftQuarterTurn5TilesUp25                  },
        {   false,  TrackPitch::Up25,      TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Left,    TrackElemType::Up25ToLeftBank                               },
        {   false,  TrackPitch::Up25,      TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::Up25ToFlat                                    },
        {   false,  TrackPitch::Up25,      TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Right,   TrackElemType::Up25ToRightBank                              },
        {   false,  TrackPitch::Up25,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Left,    TrackElemType::Up25ToLeftBankedUp25                   },
        {   false,  TrackPitch::Up25,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::Up25                                            },
        {   false,  TrackPitch::Up25,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Right,   TrackElemType::Up25ToRightBankedUp25                  },
        {   false,  TrackPitch::Up25,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up60,      TrackRoll::None,    TrackElemType::Up25ToUp60                               },
        {   false,  TrackPitch::Up25,      TrackRoll::None,    TrackCurve::Right,              TrackPitch::Up25,      TrackRoll::None,    TrackElemType::RightQuarterTurn5TilesUp25                 },
        {   false,  TrackPitch::Up25,      TrackRoll::None,    TrackCurve::RightSmall,        TrackPitch::Up25,      TrackRoll::None,    TrackElemType::RightQuarterTurn3TilesUp25                 },
        {   false,  TrackPitch::Up25,      TrackRoll::Right,   TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::RightBankedUp25ToFlat                       },
        {   false,  TrackPitch::Up25,      TrackRoll::Right,   TrackCurve::None,               TrackPitch::None,       TrackRoll::Right,   TrackElemType::RightBankedUp25ToRightBankedFlat          },
        {   false,  TrackPitch::Up25,      TrackRoll::Right,   TrackCurve::None,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::RightBankedUp25ToUp25                  },
        {   false,  TrackPitch::Up25,      TrackRoll::Right,   TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Right,   TrackElemType::Up25RightBanked                               },
        {   false,  TrackPitch::Up25,      TrackRoll::Right,   TrackCurve::Right,              TrackPitch::Up25,      TrackRoll::Right,   TrackElemType::RightBankedQuarterTurn5TileUp25           },
        {   false,  TrackPitch::Up25,      TrackRoll::Right,   TrackCurve::RightSmall,        TrackPitch::Up25,      TrackRoll::Right,   TrackElemType::RightBankedQuarterTurn3TileUp25           },
        {   false,  TrackPitch::Up60,      TrackRoll::None,    TrackCurve::LeftSmall,         TrackPitch::Up60,      TrackRoll::None,    TrackElemType::LeftQuarterTurn1TileUp60                   },
        {   false,  TrackPitch::Up60,      TrackRoll::None,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::Up60ToFlat                                    },
        {   false,  TrackPitch::Up60,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::Up60ToUp25                               },
        {   false,  TrackPitch::Up60,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up60,      TrackRoll::None,    TrackElemType::Up60                                            },
        {   false,  TrackPitch::Up60,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up90,      TrackRoll::None,    TrackElemType::Up60ToUp90                               },
        {   false,  TrackPitch::Up60,      TrackRoll::None,    TrackCurve::RightSmall,        TrackPitch::Up60,      TrackRoll::None,    TrackElemType::RightQuarterTurn1TileUp60                  },
        {   false,  TrackPitch::Up90,      TrackRoll::None,    TrackCurve::LeftSmall,         TrackPitch::Up90,      TrackRoll::None,    TrackElemType::LeftQuarterTurn1TileUp90                   },
        {   false,  TrackPitch::Up90,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up60,      TrackRoll::None,    TrackElemType::Up90ToUp60                               },
        {   false,  TrackPitch::Up90,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up90,      TrackRoll::None,    TrackElemType::Up90                                            },
        {   false,  TrackPitch::Up90,      TrackRoll::None,    TrackCurve::RightSmall,        TrackPitch::Up90,      TrackRoll::None,    TrackElemType::RightQuarterTurn1TileUp90                  },
        {   false,  TrackPitch::Up25,      TrackRoll::None,    TrackCurve::LeftLarge,         TrackPitch::Up25,      TrackRoll::None,    TrackElemType::LeftEighthToDiagUp25          },  // TrackElemType::LeftEighthToDiagUp25         
        {   false,  TrackPitch::Up25,      TrackRoll::None,    TrackCurve::RightLarge,        TrackPitch::Up25,      TrackRoll::None,    TrackElemType::RightEighthToDiagUp25         },  // TrackElemType::RightEighthToDiagUp25        
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::LeftLarge,         TrackPitch::Down25,    TrackRoll::None,    TrackElemType::LeftEighthToDiagDown25        },  // TrackElemType::LeftEighthToDiagDown25       
        {   false,  TrackPitch::Down25,    TrackRoll::None,    TrackCurve::RightLarge,        TrackPitch::Down25,    TrackRoll::None,    TrackElemType::RightEighthToDiagDown25       },  // TrackElemType::RightEighthToDiagDown25      
        {   true,   TrackPitch::Up25,      TrackRoll::None,    TrackCurve::LeftLarge,         TrackPitch::Up25,      TrackRoll::None,    TrackElemType::LeftEighthToOrthogonalUp25    },  // TrackElemType::LeftEighthToOrthogonalUp25   
        {   true,   TrackPitch::Up25,      TrackRoll::None,    TrackCurve::RightLarge,        TrackPitch::Up25,      TrackRoll::None,    TrackElemType::RightEighthToOrthogonalUp25   },  // TrackElemType::RightEighthToOrthogonalUp25  
        {   true,   TrackPitch::Down25,    TrackRoll::None,    TrackCurve::LeftLarge,         TrackPitch::Down25,    TrackRoll::None,    TrackElemType::LeftEighthToOrthogonalDown25  },  // TrackElemType::LeftEighthToOrthogonalDown25 
        {   true,   TrackPitch::Down25,    TrackRoll::None,    TrackCurve::RightLarge,        TrackPitch::Down25,    TrackRoll::None,    TrackElemType::RightEighthToOrthogonalDown25 },  // TrackElemType::RightEighthToOrthogonalDown25
        {   true,   TrackPitch::Up25,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Left,    TrackElemType::DiagUp25ToLeftBankedUp25               }, // TrackElemType::DiagUp25ToLeftBankedUp25
        {   true,   TrackPitch::Up25,      TrackRoll::None,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Right,   TrackElemType::DiagUp25ToRightBankedUp25              }, // TrackElemType::DiagUp25ToRightBankedUp25
        {   true,   TrackPitch::Up25,      TrackRoll::Left,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::DiagLeftBankedUp25ToUp25               }, // TrackElemType::DiagLeftBankedUp25ToUp25
        {   true,   TrackPitch::Up25,      TrackRoll::Right,   TrackCurve::None,               TrackPitch::Up25,      TrackRoll::None,    TrackElemType::DiagRightBankedUp25ToUp25              }, // TrackElemType::DiagRightBankedUp25ToUp25
        {   true,   TrackPitch::Down25,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Left,    TrackElemType::DiagDown25ToLeftBankedDown25           }, // TrackElemType::DiagDown25ToLeftBankedDown25
        {   true,   TrackPitch::Down25,    TrackRoll::None,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Right,   TrackElemType::DiagDown25ToRightBankedDown25          }, // TrackElemType::DiagDown25ToRightBankedDown25
        {   true,   TrackPitch::Down25,    TrackRoll::Left,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::DiagLeftBankedDown25ToDown25           }, // TrackElemType::DiagLeftBankedDown25ToDown25
        {   true,   TrackPitch::Down25,    TrackRoll::Right,   TrackCurve::None,               TrackPitch::Down25,    TrackRoll::None,    TrackElemType::DiagRightBankedDown25ToDown25          }, // TrackElemType::DiagRightBankedDown25ToDown25
        {   true,   TrackPitch::None,       TrackRoll::Left,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Left,    TrackElemType::DiagLeftBankedFlatToLeftBankedUp25     }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25
        {   true,   TrackPitch::None,       TrackRoll::Right,   TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Right,   TrackElemType::DiagRightBankedFlatToRightBankedUp25   }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25
        {   true,   TrackPitch::Up25,      TrackRoll::Left,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Left,    TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat     }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat
        {   true,   TrackPitch::Up25,      TrackRoll::Right,   TrackCurve::None,               TrackPitch::None,       TrackRoll::Right,   TrackElemType::DiagRightBankedUp25ToRightBankedFlat   }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat
        {   true,   TrackPitch::None,       TrackRoll::Left,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Left,    TrackElemType::DiagLeftBankedFlatToLeftBankedDown25   }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25
        {   true,   TrackPitch::None,       TrackRoll::Right,   TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Right,   TrackElemType::DiagRightBankedFlatToRightBankedDown25 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25
        {   true,   TrackPitch::Down25,    TrackRoll::Left,    TrackCurve::None,               TrackPitch::None,       TrackRoll::Left,    TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat   }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat
        {   true,   TrackPitch::Down25,    TrackRoll::Right,   TrackCurve::None,               TrackPitch::None,       TrackRoll::Right,   TrackElemType::DiagRightBankedDown25ToRightBankedFlat }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat
        {   true,   TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Left,    TrackElemType::DiagFlatToLeftBankedUp25               }, // TrackElemType::DiagFlatToLeftBankedUp25
        {   true,   TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Right,   TrackElemType::DiagFlatToRightBankedUp25              }, // TrackElemType::DiagFlatToRightBankedUp25
        {   true,   TrackPitch::Up25,      TrackRoll::Left,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::DiagLeftBankedUp25ToFlat               }, // TrackElemType::DiagLeftBankedUp25ToFlat
        {   true,   TrackPitch::Up25,      TrackRoll::Right,   TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::DiagRightBankedUp25ToFlat              }, // TrackElemType::DiagRightBankedUp25ToFlat
        {   true,   TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Left,    TrackElemType::DiagFlatToLeftBankedDown25             }, // TrackElemType::DiagFlatToLeftBankedDown25
        {   true,   TrackPitch::None,       TrackRoll::None,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Right,   TrackElemType::DiagFlatToRightBankedDown25            }, // TrackElemType::DiagFlatToRightBankedDown25
        {   true,   TrackPitch::Down25,    TrackRoll::Left,    TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::DiagLeftBankedDown25ToFlat             }, // TrackElemType::DiagLeftBankedDown25ToFlat
        {   true,   TrackPitch::Down25,    TrackRoll::Right,   TrackCurve::None,               TrackPitch::None,       TrackRoll::None,    TrackElemType::DiagRightBankedDown25ToFlat            }, // TrackElemType::DiagRightBankedDown25ToFlat
        {   true,   TrackPitch::Up25,      TrackRoll::Left,    TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Left,    TrackElemType::DiagUp25LeftBanked                         }, // TrackElemType::Up25LeftBanked
        {   true,   TrackPitch::Up25,      TrackRoll::Right,   TrackCurve::None,               TrackPitch::Up25,      TrackRoll::Right,   TrackElemType::DiagUp25RightBanked                        }, // TrackElemType::Up25RightBanked 
        {   true,   TrackPitch::Down25,    TrackRoll::Left,    TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Left,    TrackElemType::DiagDown25LeftBanked                       }, // TrackElemType::Down25LeftBanked
        {   true,   TrackPitch::Down25,    TrackRoll::Right,   TrackCurve::None,               TrackPitch::Down25,    TrackRoll::Right,   TrackElemType::DiagDown25RightBanked                      }, // TrackElemType::Down25RightBanked
        {   false,  TrackPitch::Up25,      TrackRoll::Left,    TrackCurve::LeftLarge,         TrackPitch::Up25,      TrackRoll::Left,    TrackElemType::LeftEighthBankToDiagUp25               }, // TrackElemType::LeftEighthBankToDiagUp25
        {   false,  TrackPitch::Up25,      TrackRoll::Right,   TrackCurve::RightLarge,        TrackPitch::Up25,      TrackRoll::Right,   TrackElemType::RightEighthBankToDiagUp25              }, // TrackElemType::RightEighthBankToDiagUp25
        {   false,  TrackPitch::Down25,    TrackRoll::Left,    TrackCurve::LeftLarge,         TrackPitch::Down25,    TrackRoll::Left,    TrackElemType::LeftEighthBankToDiagDown25             }, // TrackElemType::LeftEighthBankToDiagDown25
        {   false,  TrackPitch::Down25,    TrackRoll::Right,   TrackCurve::RightLarge,        TrackPitch::Down25,    TrackRoll::Right,   TrackElemType::RightEighthBankToDiagDown25            }, // TrackElemType::RightEighthBankToDiagDown25
        {   true,   TrackPitch::Up25,      TrackRoll::Left,    TrackCurve::LeftLarge,         TrackPitch::Up25,      TrackRoll::Left,    TrackElemType::LeftEighthBankToOrthogonalUp25         }, // TrackElemType::LeftEighthBankToOrthogonalUp25
        {   true,   TrackPitch::Up25,      TrackRoll::Right,   TrackCurve::RightLarge,        TrackPitch::Up25,      TrackRoll::Right,   TrackElemType::RightEighthBankToOrthogonalUp25        }, // TrackElemType::RightEighthBankToOrthogonalUp25 
        {   true,   TrackPitch::Down25,    TrackRoll::Left,    TrackCurve::LeftLarge,         TrackPitch::Down25,    TrackRoll::Left,    TrackElemType::LeftEighthBankToOrthogonalDown25       }, // TrackElemType::LeftEighthBankToOrthogonalDown25
        {   true,   TrackPitch::Down25,    TrackRoll::Right,   TrackCurve::RightLarge,        TrackPitch::Down25,    TrackRoll::Right,   TrackElemType::RightEighthBankToOrthogonalDown25      }, // TrackElemType::RightEighthBankToOrthogonalDown25     
    };
    
    /** rct2: 0x00993D1C */
    static constexpr track_type_t AlternativeTrackTypes[] = {
        TrackElemType::FlatCovered,                        // TrackElemType::Flat
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::Up25Covered,                   // TrackElemType::Up25
        TrackElemType::Up60Covered,                   // TrackElemType::Up60
        TrackElemType::FlatToUp25Covered,           // TrackElemType::FlatToUp25
        TrackElemType::Up25ToUp60Covered,      // TrackElemType::Up25ToUp60
        TrackElemType::Up60ToUp25Covered,      // TrackElemType::Up60ToUp25
        TrackElemType::Up25ToFlatCovered,           // TrackElemType::Up25ToFlat
        TrackElemType::Down25Covered,                 // TrackElemType::Down25
        TrackElemType::Down60Covered,                 // TrackElemType::Down60
        TrackElemType::FlatToDown25Covered,         // TrackElemType::FlatToDown25
        TrackElemType::Down25ToDown60Covered,  // TrackElemType::Down25ToDown60
        TrackElemType::Down60ToDown25Covered,  // TrackElemType::Down60ToDown25
        TrackElemType::Down25ToFlatCovered,         // TrackElemType::Down25ToFlat
        TrackElemType::LeftQuarterTurn5TilesCovered,   // TrackElemType::LeftQuarterTurn5Tiles
        TrackElemType::RightQuarterTurn5TilesCovered,  // TrackElemType::RightQuarterTurn5Tiles
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::SBendLeftCovered,                 // TrackElemType::SBendLeft
        TrackElemType::SBendRightCovered,                // TrackElemType::SBendRight
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::LeftQuarterTurn3TilesCovered,   // TrackElemType::LeftQuarterTurn3Tiles
        TrackElemType::RightQuarterTurn3TilesCovered,  // TrackElemType::RightQuarterTurn3Tiles
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None,
        TrackElemType::None, // TrackElemType::FlatTrack1x4A
        TrackElemType::None, // TrackElemType::FlatTrack2x2
        TrackElemType::None, // TrackElemType::FlatTrack4x4
        TrackElemType::None, // TrackElemType::FlatTrack2x4
        TrackElemType::None, // TrackElemType::FlatTrack1x5
        TrackElemType::None, // TrackElemType::FlatTrack1x1A
        TrackElemType::None, // TrackElemType::FlatTrack1x4B
        TrackElemType::None, // TrackElemType::FlatTrack1x1B
        TrackElemType::None, // TrackElemType::FlatTrack1x4C
        TrackElemType::None, // TrackElemType::FlatTrack3x3
        TrackElemType::None, // TrackElemType::LeftLargeCorkscrewUp
        TrackElemType::None, // TrackElemType::RightLargeCorkscrewUp
        TrackElemType::None, // TrackElemType::LeftLargeCorkscrewDown
        TrackElemType::None, // TrackElemType::RightCorkscrewDown
        TrackElemType::None, // TrackElemType::LeftMediumHalfLoopUp
        TrackElemType::None, // TrackElemType::RightMediumHalfLoopUp
        TrackElemType::None, // TrackElemType::LeftMediumHalfLoopDown
        TrackElemType::None, // TrackElemType::RightMediumHalfLoopDown
        TrackElemType::None, // TrackElemType::LeftZeroGRollUp
        TrackElemType::None, // TrackElemType::RightZeroGRollUp
        TrackElemType::None, // TrackElemType::LeftZeroGRollDown
        TrackElemType::None, // TrackElemType::RightZeroGRollDown
        TrackElemType::None, // TrackElemType::LeftLargeZeroGRollUp
        TrackElemType::None, // TrackElemType::RightLargeZeroGRollUp
        TrackElemType::None, // TrackElemType::LeftLargeZeroGRollDown
        TrackElemType::None, // TrackElemType::RightLargeZeroGRollDown
        TrackElemType::None, // LeftFlyerLargeHalfLoopUninvertedUp
        TrackElemType::None, // RightFlyerLargeHalfLoopUninvertedUp
        TrackElemType::None, // LeftFlyerLargeHalfLoopInvertedDown
        TrackElemType::None, // RightFlyerLargeHalfLoopInvertedDown
        TrackElemType::None, // FlyerHalfLoopInvertedUp
        TrackElemType::None, // FlyerHalfLoopUninvertedDown
        TrackElemType::None, // TrackElemType::LeftEighthToDiagUp25          
        TrackElemType::None, // TrackElemType::RightEighthToDiagUp25        
        TrackElemType::None, // TrackElemType::LeftEighthToDiagDown25       
        TrackElemType::None, // TrackElemType::RightEighthToDiagDown25      
        TrackElemType::None, // TrackElemType::LeftEighthToOrthogonalUp25   
        TrackElemType::None, // TrackElemType::RightEighthToOrthogonalUp25  
        TrackElemType::None, // TrackElemType::LeftEighthToOrthogonalDown25 
        TrackElemType::None, // TrackElemType::RightEighthToOrthogonalDown25 
        TrackElemType::None, // TrackElemType::DiagUp25ToLeftBankedUp25
        TrackElemType::None, // TrackElemType::DiagUp25ToRightBankedUp25
        TrackElemType::None, // TrackElemType::DiagLeftBankedUp25ToUp25
        TrackElemType::None, // TrackElemType::DiagRightBankedUp25ToUp25
        TrackElemType::None, // TrackElemType::DiagDown25ToLeftBankedDown25
        TrackElemType::None, // TrackElemType::DiagDown25ToRightBankedDown25
        TrackElemType::None, // TrackElemType::DiagLeftBankedDown25ToDown25
        TrackElemType::None, // TrackElemType::DiagRightBankedDown25ToDown25
        TrackElemType::None, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25
        TrackElemType::None, // TrackElemType::DiagRightBankedFlatToRightBankedUp25
        TrackElemType::None, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat
        TrackElemType::None, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat
        TrackElemType::None, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25
        TrackElemType::None, // TrackElemType::DiagRightBankedFlatToRightBankedDown25
        TrackElemType::None, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat
        TrackElemType::None, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat
        TrackElemType::None, // TrackElemType::DiagFlatToLeftBankedUp25
        TrackElemType::None, // TrackElemType::DiagFlatToRightBankedUp25
        TrackElemType::None, // TrackElemType::DiagLeftBankedUp25ToFlat
        TrackElemType::None, // TrackElemType::DiagRightBankedUp25ToFlat
        TrackElemType::None, // TrackElemType::DiagFlatToLeftBankedDown25
        TrackElemType::None, // TrackElemType::DiagFlatToRightBankedDown25
        TrackElemType::None, // TrackElemType::DiagLeftBankedDown25ToFlat
        TrackElemType::None, // TrackElemType::DiagRightBankedDown25ToFlat
        TrackElemType::None, // TrackElemType::DiagUp25LeftBanked
        TrackElemType::None, // TrackElemType::DiagUp25RightBanked 
        TrackElemType::None, // TrackElemType::DiagDown25LeftBanked
        TrackElemType::None, // TrackElemType::DiagDown25RightBanked
        TrackElemType::None, // TrackElemType::LeftEighthBankToDiagUp25
        TrackElemType::None, // TrackElemType::RightEighthBankToDiagUp25
        TrackElemType::None, // TrackElemType::LeftEighthBankToDiagDown25
        TrackElemType::None, // TrackElemType::RightEighthBankToDiagDown25
        TrackElemType::None, // TrackElemType::LeftEighthBankToOrthogonalUp25
        TrackElemType::None, // TrackElemType::RightEighthBankToOrthogonalUp25 
        TrackElemType::None, // TrackElemType::LeftEighthBankToOrthogonalDown25
        TrackElemType::None, // TrackElemType::RightEighthBankToOrthogonalDown25
        TrackElemType::None, // TrackElemType::DiagBrakes
        TrackElemType::None, // TrackElemType::DiagBlockBrakes
    };
    static_assert(std::size(AlternativeTrackTypes) == TrackElemType::Count);
    
    /** rct2: 0x0099DA34 */
    static constexpr money64 TrackPricing[] = {
        65536,  // TrackElemType::Flat
        98304,  // TrackElemType::EndStation
        98304,  // TrackElemType::BeginStation
        98304,  // TrackElemType::MiddleStation
        79872,  // TrackElemType::Up25
        114688, // TrackElemType::Up60
        73728,  // TrackElemType::FlatToUp25
        96256,  // TrackElemType::Up25ToUp60
        96256,  // TrackElemType::Up60ToUp25
        73728,  // TrackElemType::Up25ToFlat
        79872,  // TrackElemType::Down25
        114688, // TrackElemType::Down60
        73728,  // TrackElemType::FlatToDown25
        96256,  // TrackElemType::Down25ToDown60
        96256,  // TrackElemType::Down60ToDown25
        73728,  // TrackElemType::Down25ToFlat
        257359, // TrackElemType::LeftQuarterTurn5Tiles
        257359, // TrackElemType::RightQuarterTurn5Tiles
        69632,  // TrackElemType::FlatToLeftBank
        69632,  // TrackElemType::FlatToRightBank
        69632,  // TrackElemType::LeftBankToFlat
        69632,  // TrackElemType::RightBankToFlat
        273443, // TrackElemType::BankedLeftQuarterTurn5Tiles
        273443, // TrackElemType::BankedRightQuarterTurn5Tiles
        78336,  // TrackElemType::LeftBankToUp25
        78336,  // TrackElemType::RightBankToUp25
        78336,  // TrackElemType::Up25ToLeftBank
        78336,  // TrackElemType::Up25ToRightBank
        78336,  // TrackElemType::LeftBankToDown25
        78336,  // TrackElemType::RightBankToDown25
        78336,  // TrackElemType::Down25ToLeftBank
        78336,  // TrackElemType::Down25ToRightBank
        69632,  // TrackElemType::LeftBank
        69632,  // TrackElemType::RightBank
        313656, // TrackElemType::LeftQuarterTurn5TilesUp25
        313656, // TrackElemType::RightQuarterTurn5TilesUp25
        313656, // TrackElemType::LeftQuarterTurn5TilesDown25
        313656, // TrackElemType::RightQuarterTurn5TilesDown25
        229376, // TrackElemType::SBendLeft
        229376, // TrackElemType::SBendRight
        491520, // TrackElemType::LeftVerticalLoop
        491520, // TrackElemType::RightVerticalLoop
        154415, // TrackElemType::LeftQuarterTurn3Tiles
        154415, // TrackElemType::RightQuarterTurn3Tiles
        164065, // TrackElemType::LeftBankedQuarterTurn3Tiles
        164065, // TrackElemType::RightBankedQuarterTurn3Tiles
        270226, // TrackElemType::LeftQuarterTurn3TilesUp25
        270226, // TrackElemType::RightQuarterTurn3TilesUp25
        270226, // TrackElemType::LeftQuarterTurn3TilesDown25
        270226, // TrackElemType::RightQuarterTurn3TilesDown25
        51471,  // TrackElemType::LeftQuarterTurn1Tile
        51471,  // TrackElemType::RightQuarterTurn1Tile
        212992, // TrackElemType::LeftTwistDownToUp
        212992, // TrackElemType::RightTwistDownToUp
        212992, // TrackElemType::LeftTwistUpToDown
        212992, // TrackElemType::RightTwistUpToDown
        294912, // TrackElemType::HalfLoopUp
        294912, // TrackElemType::HalfLoopDown
        229376, // TrackElemType::LeftCorkscrewUp
        229376, // TrackElemType::RightCorkscrewUp
        229376, // TrackElemType::LeftCorkscrewDown
        229376, // TrackElemType::RightCorkscrewDown
        98304,  // TrackElemType::FlatToUp60
        98304,  // TrackElemType::Up60ToFlat
        98304,  // TrackElemType::FlatToDown60
        98304,  // TrackElemType::Down60ToFlat
        524288, // TrackElemType::TowerBase
        65536,  // TrackElemType::TowerSection
        69632,  // TrackElemType::FlatCovered
        83968,  // TrackElemType::Up25Covered
        118784, // TrackElemType::Up60Covered
        77824,  // TrackElemType::FlatToUp25Covered
        100352, // TrackElemType::Up25ToUp60Covered
        100352, // TrackElemType::Up60ToUp25Covered
        77824,  // TrackElemType::Up25ToFlatCovered
        83968,  // TrackElemType::Down25Covered
        118784, // TrackElemType::Down60Covered
        77824,  // TrackElemType::FlatToDown25Covered
        100352, // TrackElemType::Down25ToDown60Covered
        100352, // TrackElemType::Down60ToDown25Covered
        77824,  // TrackElemType::Down25ToFlatCovered
        261455, // TrackElemType::LeftQuarterTurn5TilesCovered
        261455, // TrackElemType::RightQuarterTurn5TilesCovered
        233472, // TrackElemType::SBendLeftCovered
        233472, // TrackElemType::SBendRightCovered
        158511, // TrackElemType::LeftQuarterTurn3TilesCovered
        158511, // TrackElemType::RightQuarterTurn3TilesCovered
        328192, // TrackElemType::LeftHalfBankedHelixUpSmall
        328192, // TrackElemType::RightHalfBankedHelixUpSmall
        328192, // TrackElemType::LeftHalfBankedHelixDownSmall
        328192, // TrackElemType::RightHalfBankedHelixDownSmall
        547072, // TrackElemType::LeftHalfBankedHelixUpLarge
        547072, // TrackElemType::RightHalfBankedHelixUpLarge
        547072, // TrackElemType::LeftHalfBankedHelixDownLarge
        547072, // TrackElemType::RightHalfBankedHelixDownLarge
        126976, // TrackElemType::LeftQuarterTurn1TileUp60
        126976, // TrackElemType::RightQuarterTurn1TileUp60
        126976, // TrackElemType::LeftQuarterTurn1TileDown60
        126976, // TrackElemType::RightQuarterTurn1TileDown60
        90112,  // TrackElemType::Brakes
        77824,  // TrackElemType::Booster
        65536,  // TrackElemType::Maze
        273539, // TrackElemType::LeftQuarterBankedHelixLargeUp
        273539, // TrackElemType::RightQuarterBankedHelixLargeUp
        273539, // TrackElemType::LeftQuarterBankedHelixLargeDown
        273539, // TrackElemType::RightQuarterBankedHelixLargeDown
        273539, // TrackElemType::LeftQuarterHelixLargeUp
        273539, // TrackElemType::RightQuarterHelixLargeUp
        273539, // TrackElemType::LeftQuarterHelixLargeDown
        273539, // TrackElemType::RightQuarterHelixLargeDown
        83968,  // TrackElemType::Up25LeftBanked
        83968,  // TrackElemType::Up25RightBanked
        143360, // TrackElemType::Waterfall
        118784, // TrackElemType::Rapids
        196608, // TrackElemType::OnRidePhoto
        83968,  // TrackElemType::Down25LeftBanked
        83968,  // TrackElemType::Down25RightBanked
        393216, // TrackElemType::Watersplash
        376832, // TrackElemType::FlatToUp60LongBase
        376832, // TrackElemType::Up60ToFlatLongBase
        126976, // TrackElemType::Whirlpool
        376832, // TrackElemType::Down60ToFlatLongBase
        376832, // TrackElemType::FlatToDown60LongBase
        643072, // TrackElemType::CableLiftHill
        491520, // TrackElemType::ReverseFreefallSlope
        65536,  // TrackElemType::ReverseFreefallVertical
        69632,  // TrackElemType::Up90
        69632,  // TrackElemType::Down90
        114688, // TrackElemType::Up60ToUp90
        114688, // TrackElemType::Down90ToDown60
        114688, // TrackElemType::Up90ToUp60
        114688, // TrackElemType::Down60ToDown90
        147456, // TrackElemType::BrakeForDrop
        180151, // TrackElemType::LeftEighthToDiag
        180151, // TrackElemType::RightEighthToDiag
        180151, // TrackElemType::LeftEighthToOrthogonal
        180151, // TrackElemType::RightEighthToOrthogonal
        190960, // TrackElemType::LeftEighthBankToDiag
        190960, // TrackElemType::RightEighthBankToDiag
        190960, // TrackElemType::LeftEighthBankToOrthogonal
        190960, // TrackElemType::RightEighthBankToOrthogonal
        92681,  // TrackElemType::DiagFlat
        111820, // TrackElemType::DiagUp25
        147456, // TrackElemType::DiagUp60
        102400, // TrackElemType::DiagFlatToUp25
        129024, // TrackElemType::DiagUp25ToUp60
        129024, // TrackElemType::DiagUp60ToUp25
        102400, // TrackElemType::DiagUp25ToFlat
        111820, // TrackElemType::DiagDown25
        147456, // TrackElemType::DiagDown60
        102400, // TrackElemType::DiagFlatToDown25
        129024, // TrackElemType::DiagDown25ToDown60
        129024, // TrackElemType::DiagDown60ToDown25
        102400, // TrackElemType::DiagDown25ToFlat
        107008, // TrackElemType::DiagFlatToUp60
        107008, // TrackElemType::DiagUp60ToFlat
        107008, // TrackElemType::DiagFlatToDown60
        107008, // TrackElemType::DiagDown60ToFlat
        96777,  // TrackElemType::DiagFlatToLeftBank
        96777,  // TrackElemType::DiagFlatToRightBank
        96777,  // TrackElemType::DiagLeftBankToFlat
        96777,  // TrackElemType::DiagRightBankToFlat
        106496, // TrackElemType::DiagLeftBankToUp25
        106496, // TrackElemType::DiagRightBankToUp25
        106496, // TrackElemType::DiagUp25ToLeftBank
        106496, // TrackElemType::DiagUp25ToRightBank
        106496, // TrackElemType::DiagLeftBankToDown25
        106496, // TrackElemType::DiagRightBankToDown25
        106496, // TrackElemType::DiagDown25ToLeftBank
        106496, // TrackElemType::DiagDown25ToRightBank
        96777,  // TrackElemType::DiagLeftBank
        96777,  // TrackElemType::DiagRightBank
        282624, // TrackElemType::LogFlumeReverser
        217088, // TrackElemType::SpinningTunnel
        221184, // TrackElemType::LeftBarrelRollUpToDown
        221184, // TrackElemType::RightBarrelRollUpToDown
        221184, // TrackElemType::LeftBarrelRollDownToUp
        221184, // TrackElemType::RightBarrelRollDownToUp
        270226, // TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25
        270226, // TrackElemType::RightBankToRightQuarterTurn3TilesUp25
        270226, // TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank
        270226, // TrackElemType::RightQuarterTurn3TilesDown25ToRightBank
        96384,  // TrackElemType::PoweredLift
        884736, // TrackElemType::LeftLargeHalfLoopUp
        884736, // TrackElemType::RightLargeHalfLoopUp
        884736, // TrackElemType::LeftLargeHalfLoopDown
        884736, // TrackElemType::RightLargeHalfLoopDown
        221184, // TrackElemType::LeftFlyerTwistUp
        221184, // TrackElemType::RightFlyerTwistUp
        221184, // TrackElemType::LeftFlyerTwistDown
        221184, // TrackElemType::RightFlyerTwistDown
        294912, // TrackElemType::FlyerHalfLoopUninvertedUp
        294912, // TrackElemType::FlyerHalfLoopInvertedDown
        229376, // TrackElemType::LeftFlyerCorkscrewUp
        229376, // TrackElemType::RightFlyerCorkscrewUp
        229376, // TrackElemType::LeftFlyerCorkscrewDown
        229376, // TrackElemType::RightFlyerCorkscrewDown
        294912, // TrackElemType::HeartLineTransferUp
        294912, // TrackElemType::HeartLineTransferDown
        417792, // TrackElemType::LeftHeartLineRoll
        417792, // TrackElemType::RightHeartLineRoll
        159744, // TrackElemType::MinigolfHoleA
        167936, // TrackElemType::MinigolfHoleB
        172032, // TrackElemType::MinigolfHoleC
        184320, // TrackElemType::MinigolfHoleD
        184320, // TrackElemType::MinigolfHoleE
        360448, // TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop
        360448, // TrackElemType::Up90ToInvertedFlatQuarterLoop
        360448, // TrackElemType::InvertedFlatToDown90QuarterLoop
        270226, // TrackElemType::LeftCurvedLiftHill
        270226, // TrackElemType::RightCurvedLiftHill
        393216, // TrackElemType::LeftReverser
        393216, // TrackElemType::RightReverser
        65536,  // TrackElemType::AirThrustTopCap
        65536,  // TrackElemType::AirThrustVerticalDown
        491520, // TrackElemType::AirThrustVerticalDownToLevel
        94208,  // TrackElemType::BlockBrakes
        287115, // TrackElemType::LeftBankedQuarterTurn3TileUp25
        287115, // TrackElemType::RightBankedQuarterTurn3TileUp25
        287115, // TrackElemType::LeftBankedQuarterTurn3TileDown25
        287115, // TrackElemType::RightBankedQuarterTurn3TileDown25
        333259, // TrackElemType::LeftBankedQuarterTurn5TileUp25
        333259, // TrackElemType::RightBankedQuarterTurn5TileUp25
        333259, // TrackElemType::LeftBankedQuarterTurn5TileDown25
        333259, // TrackElemType::RightBankedQuarterTurn5TileDown25
        83968,  // TrackElemType::Up25ToLeftBankedUp25
        83968,  // TrackElemType::Up25ToRightBankedUp25
        83968,  // TrackElemType::LeftBankedUp25ToUp25
        83968,  // TrackElemType::RightBankedUp25ToUp25
        83968,  // TrackElemType::Down25ToLeftBankedDown25
        83968,  // TrackElemType::Down25ToRightBankedDown25
        83968,  // TrackElemType::LeftBankedDown25ToDown25
        83968,  // TrackElemType::RightBankedDown25ToDown25
        77824,  // TrackElemType::LeftBankedFlatToLeftBankedUp25
        77824,  // TrackElemType::RightBankedFlatToRightBankedUp25
        77824,  // TrackElemType::LeftBankedUp25ToLeftBankedFlat
        77824,  // TrackElemType::RightBankedUp25ToRightBankedFlat
        77824,  // TrackElemType::LeftBankedFlatToLeftBankedDown25
        77824,  // TrackElemType::RightBankedFlatToRightBankedDown25
        77824,  // TrackElemType::LeftBankedDown25ToLeftBankedFlat
        77824,  // TrackElemType::RightBankedDown25ToRightBankedFlat
        77824,  // TrackElemType::FlatToLeftBankedUp25
        77824,  // TrackElemType::FlatToRightBankedUp25
        77824,  // TrackElemType::LeftBankedUp25ToFlat
        77824,  // TrackElemType::RightBankedUp25ToFlat
        77824,  // TrackElemType::FlatToLeftBankedDown25
        77824,  // TrackElemType::FlatToRightBankedDown25
        77824,  // TrackElemType::LeftBankedDown25ToFlat
        77824,  // TrackElemType::RightBankedDown25ToFlat
        151552, // TrackElemType::LeftQuarterTurn1TileUp90
        151552, // TrackElemType::RightQuarterTurn1TileUp90
        151552, // TrackElemType::LeftQuarterTurn1TileDown90
        151552, // TrackElemType::RightQuarterTurn1TileDown90
        360448, // TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop
        360448, // TrackElemType::MultiDimFlatToDown90QuarterLoop
        360448, // TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop
        77824,  // TrackElemType::RotationControlToggle
        262144, // TrackElemType::FlatTrack1x4A
        262144, // TrackElemType::FlatTrack2x2
        1048576,// TrackElemType::FlatTrack4x4
        524288, // TrackElemType::FlatTrack2x4
        327680, // TrackElemType::FlatTrack1x5
        65536,  // TrackElemType::FlatTrack1x1A
        262144, // TrackElemType::FlatTrack1x4B
        65536,  // TrackElemType::FlatTrack1x1B
        262144, // TrackElemType::FlatTrack1x4C
        524288, // TrackElemType::FlatTrack3x3
        360448, // TrackElemType::LeftLargeCorkscrewUp
        360448, // TrackElemType::RightLargeCorkscrewUp
        360448, // TrackElemType::LeftLargeCorkscrewDown
        360448, // TrackElemType::RightCorkscrewDown
        589824, // TrackElemType::LeftMediumHalfLoopUp
        589824, // TrackElemType::RightMediumHalfLoopUp
        589824, // TrackElemType::LeftMediumHalfLoopDown
        589824, // TrackElemType::RightMediumHalfLoopDown
        229376, // TrackElemType::LeftZeroGRollUp
        229376, // TrackElemType::RightZeroGRollUp
        229376, // TrackElemType::LeftZeroGRollDown
        229376, // TrackElemType::RightZeroGRollDown
        425984, // TrackElemType::LeftLargeZeroGRollUp
        425984, // TrackElemType::RightLargeZeroGRollUp
        425984, // TrackElemType::LeftLargeZeroGRollDown
        425984, // TrackElemType::RightLargeZeroGRollDown
        884736, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp
        884736, // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp
        884736, // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown
        884736, // TrackElemType::RightFlyerLargeHalfLoopInvertedDown
        884736, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp
        884736, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp
        884736, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown
        884736, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown
        294912, // TrackElemType::FlyerHalfLoopInvertedUp
        294912, // TrackElemType::FlyerHalfLoopUninvertedDown
        219559, // TrackElemType::LeftEighthToDiagUp25
        219559, // TrackElemType::RightEighthToDiagUp25
        219559, // TrackElemType::LeftEighthToDiagDown25
        219559, // TrackElemType::RightEighthToDiagDown25
        219559, // TrackElemType::LeftEighthToOrthogonalUp25
        219559, // TrackElemType::RightEighthToOrthogonalUp25
        219559, // TrackElemType::LeftEighthToOrthogonalDown25
        219559, // TrackElemType::RightEighthToOrthogonalDown25
        118809, // TrackElemType::DiagUp25ToLeftBankedUp25
        118809, // TrackElemType::DiagUp25ToRightBankedUp25
        118809, // TrackElemType::DiagLeftBankedUp25ToUp25
        118809, // TrackElemType::DiagRightBankedUp25ToUp25
        118809, // TrackElemType::DiagDown25ToLeftBankedDown25
        118809, // TrackElemType::DiagDown25ToRightBankedDown25
        118809, // TrackElemType::DiagLeftBankedDown25ToDown25
        118809, // TrackElemType::DiagRightBankedDown25ToDown25
        108800, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25
        108800, // TrackElemType::DiagRightBankedFlatToRightBankedUp25
        108800, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat
        108800, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat
        108800, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25
        108800, // TrackElemType::DiagRightBankedFlatToRightBankedDown25
        108800, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat
        108800, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat
        108800, // TrackElemType::DiagFlatToLeftBankedUp25
        108800, // TrackElemType::DiagFlatToRightBankedUp25
        108800, // TrackElemType::DiagLeftBankedUp25ToFlat
        108800, // TrackElemType::DiagRightBankedUp25ToFlat
        108800, // TrackElemType::DiagFlatToLeftBankedDown25
        108800, // TrackElemType::DiagFlatToRightBankedDown25
        108800, // TrackElemType::DiagLeftBankedDown25ToFlat
        108800, // TrackElemType::DiagRightBankedDown25ToFlat
        118809, // TrackElemType::DiagUp25LeftBanked
        118809, // TrackElemType::DiagUp25RightBanked 
        118809, // TrackElemType::DiagDown25LeftBanked
        118809, // TrackElemType::DiagDown25RightBanked
        233281, // TrackElemType::LeftEighthBankToDiagUp25
        233281, // TrackElemType::RightEighthBankToDiagUp25
        233281, // TrackElemType::LeftEighthBankToDiagDown25
        233281, // TrackElemType::RightEighthBankToDiagDown25
        233281, // TrackElemType::LeftEighthBankToOrthogonalUp25
        233281, // TrackElemType::RightEighthBankToOrthogonalUp25 
        233281, // TrackElemType::LeftEighthBankToOrthogonalDown25
        233281, // TrackElemType::RightEighthBankToOrthogonalDown25
        123456, // TrackElemType::DiagBrakes
        123456, // TrackElemType::DiagBlockBrakes
    };
    
    
    
    static_assert(std::size(TrackPricing) == TrackElemType::Count);
    
    /** rct2: 0x0099EA1C */
    static constexpr track_type_t TrackElementMirrorMap[] = {
        TrackElemType::Flat,
        TrackElemType::EndStation,
        TrackElemType::BeginStation,
        TrackElemType::MiddleStation,
        TrackElemType::Up25,
        TrackElemType::Up60,
        TrackElemType::FlatToUp25,
        TrackElemType::Up25ToUp60,
        TrackElemType::Up60ToUp25,
        TrackElemType::Up25ToFlat,
        TrackElemType::Down25,
        TrackElemType::Down60,
        TrackElemType::FlatToDown25,
        TrackElemType::Down25ToDown60,
        TrackElemType::Down60ToDown25,
        TrackElemType::Down25ToFlat,
        TrackElemType::RightQuarterTurn5Tiles, // TrackElemType::LeftQuarterTurn5Tiles
        TrackElemType::LeftQuarterTurn5Tiles, // TrackElemType::RightQuarterTurn5Tiles
        TrackElemType::FlatToRightBank, // TrackElemType::FlatToLeftBank
        TrackElemType::FlatToLeftBank, // TrackElemType::FlatToRightBank
        TrackElemType::RightBankToFlat, // TrackElemType::LeftBankToFlat
        TrackElemType::LeftBankToFlat, // TrackElemType::RightBankToFlat
        TrackElemType::BankedRightQuarterTurn5Tiles, // TrackElemType::BankedLeftQuarterTurn5Tiles
        TrackElemType::BankedLeftQuarterTurn5Tiles, // TrackElemType::BankedRightQuarterTurn5Tiles
        TrackElemType::RightBankToUp25, // TrackElemType::LeftBankToUp25
        TrackElemType::LeftBankToUp25, // TrackElemType::RightBankToUp25
        TrackElemType::Up25ToRightBank, // TrackElemType::Up25ToLeftBank
        TrackElemType::Up25ToLeftBank, // TrackElemType::Up25ToRightBank
        TrackElemType::RightBankToDown25, // TrackElemType::LeftBankToDown25
        TrackElemType::LeftBankToDown25, // TrackElemType::RightBankToDown25
        TrackElemType::Down25ToRightBank, // TrackElemType::Down25ToLeftBank
        TrackElemType::Down25ToLeftBank, // TrackElemType::Down25ToRightBank
        TrackElemType::RightBank, // TrackElemType::LeftBank
        TrackElemType::LeftBank, // TrackElemType::RightBank
        TrackElemType::RightQuarterTurn5TilesUp25, // TrackElemType::LeftQuarterTurn5TilesUp25
        TrackElemType::LeftQuarterTurn5TilesUp25, // TrackElemType::RightQuarterTurn5TilesUp25
        TrackElemType::RightQuarterTurn5TilesDown25, // TrackElemType::LeftQuarterTurn5TilesDown25
        TrackElemType::LeftQuarterTurn5TilesDown25, // TrackElemType::RightQuarterTurn5TilesDown25
        TrackElemType::SBendRight, // TrackElemType::SBendLeft
        TrackElemType::SBendLeft, // TrackElemType::SBendRight
        TrackElemType::RightVerticalLoop, // TrackElemType::LeftVerticalLoop
        TrackElemType::LeftVerticalLoop, // TrackElemType::RightVerticalLoop
        TrackElemType::RightQuarterTurn3Tiles, // TrackElemType::LeftQuarterTurn3Tiles
        TrackElemType::LeftQuarterTurn3Tiles, // TrackElemType::RightQuarterTurn3Tiles
        TrackElemType::RightBankedQuarterTurn3Tiles, // TrackElemType::LeftBankedQuarterTurn3Tiles
        TrackElemType::LeftBankedQuarterTurn3Tiles, // TrackElemType::RightBankedQuarterTurn3Tiles
        TrackElemType::RightQuarterTurn3TilesUp25, // TrackElemType::LeftQuarterTurn3TilesUp25
        TrackElemType::LeftQuarterTurn3TilesUp25, // TrackElemType::RightQuarterTurn3TilesUp25
        TrackElemType::RightQuarterTurn3TilesDown25, // TrackElemType::LeftQuarterTurn3TilesDown25
        TrackElemType::LeftQuarterTurn3TilesDown25, // TrackElemType::RightQuarterTurn3TilesDown25
        TrackElemType::RightQuarterTurn1Tile, // TrackElemType::LeftQuarterTurn1Tile
        TrackElemType::LeftQuarterTurn1Tile, // TrackElemType::RightQuarterTurn1Tile
        TrackElemType::RightTwistDownToUp, // TrackElemType::LeftTwistDownToUp
        TrackElemType::LeftTwistDownToUp, // TrackElemType::RightTwistDownToUp
        TrackElemType::RightTwistUpToDown, // TrackElemType::LeftTwistUpToDown
        TrackElemType::LeftTwistUpToDown, // TrackElemType::RightTwistUpToDown
        TrackElemType::HalfLoopUp,
        TrackElemType::HalfLoopDown,
        TrackElemType::RightCorkscrewUp, // TrackElemType::LeftCorkscrewUp
        TrackElemType::LeftCorkscrewUp, // TrackElemType::RightCorkscrewUp
        TrackElemType::RightCorkscrewDown, // TrackElemType::LeftCorkscrewDown
        TrackElemType::LeftCorkscrewDown, // TrackElemType::RightCorkscrewDown
        TrackElemType::FlatToUp60,
        TrackElemType::Up60ToFlat,
        TrackElemType::FlatToDown60,
        TrackElemType::Down60ToFlat,
        TrackElemType::TowerBase,
        TrackElemType::TowerSection,
        TrackElemType::FlatCovered,
        TrackElemType::Up25Covered,
        TrackElemType::Up60Covered,
        TrackElemType::FlatToUp25Covered,
        TrackElemType::Up25ToUp60Covered,
        TrackElemType::Up60ToUp25Covered,
        TrackElemType::Up25ToFlatCovered,
        TrackElemType::Down25Covered,
        TrackElemType::Down60Covered,
        TrackElemType::FlatToDown25Covered,
        TrackElemType::Down25ToDown60Covered,
        TrackElemType::Down60ToDown25Covered,
        TrackElemType::Down25ToFlatCovered,
        TrackElemType::RightQuarterTurn5TilesCovered, // TrackElemType::LeftQuarterTurn5TilesCovered
        TrackElemType::LeftQuarterTurn5TilesCovered, // TrackElemType::RightQuarterTurn5TilesCovered
        TrackElemType::SBendRightCovered, // TrackElemType::SBendLeftCovered
        TrackElemType::SBendLeftCovered, // TrackElemType::SBendRightCovered
        TrackElemType::RightQuarterTurn3TilesCovered, // TrackElemType::LeftQuarterTurn3TilesCovered
        TrackElemType::LeftQuarterTurn3TilesCovered, // TrackElemType::RightQuarterTurn3TilesCovered
        TrackElemType::RightHalfBankedHelixUpSmall, // TrackElemType::LeftHalfBankedHelixUpSmall
        TrackElemType::LeftHalfBankedHelixUpSmall, // TrackElemType::RightHalfBankedHelixUpSmall
        TrackElemType::RightHalfBankedHelixDownSmall, // TrackElemType::LeftHalfBankedHelixDownSmall
        TrackElemType::LeftHalfBankedHelixDownSmall, // TrackElemType::RightHalfBankedHelixDownSmall
        TrackElemType::RightHalfBankedHelixUpLarge, // TrackElemType::LeftHalfBankedHelixUpLarge
        TrackElemType::LeftHalfBankedHelixUpLarge, // TrackElemType::RightHalfBankedHelixUpLarge
        TrackElemType::RightHalfBankedHelixDownLarge, // TrackElemType::LeftHalfBankedHelixDownLarge
        TrackElemType::LeftHalfBankedHelixDownLarge, // TrackElemType::RightHalfBankedHelixDownLarge
        TrackElemType::RightQuarterTurn1TileUp60, // TrackElemType::LeftQuarterTurn1TileUp60
        TrackElemType::LeftQuarterTurn1TileUp60, // TrackElemType::RightQuarterTurn1TileUp60
        TrackElemType::RightQuarterTurn1TileDown60, // TrackElemType::LeftQuarterTurn1TileDown60
        TrackElemType::LeftQuarterTurn1TileDown60, // TrackElemType::RightQuarterTurn1TileDown60
        TrackElemType::Brakes,
        TrackElemType::Booster,
        TrackElemType::Maze,
        TrackElemType::RightQuarterBankedHelixLargeUp, // TrackElemType::LeftQuarterBankedHelixLargeUp
        TrackElemType::LeftQuarterBankedHelixLargeUp, // TrackElemType::RightQuarterBankedHelixLargeUp
        TrackElemType::RightQuarterBankedHelixLargeDown, // TrackElemType::LeftQuarterBankedHelixLargeDown
        TrackElemType::LeftQuarterBankedHelixLargeDown, // TrackElemType::RightQuarterBankedHelixLargeDown
        TrackElemType::RightQuarterHelixLargeUp, // TrackElemType::LeftQuarterHelixLargeUp
        TrackElemType::LeftQuarterHelixLargeUp, // TrackElemType::RightQuarterHelixLargeUp
        TrackElemType::RightQuarterHelixLargeDown, // TrackElemType::LeftQuarterHelixLargeDown
        TrackElemType::LeftQuarterHelixLargeDown, // TrackElemType::RightQuarterHelixLargeDown
        TrackElemType::Up25RightBanked, // TrackElemType::Up25LeftBanked
        TrackElemType::Up25LeftBanked, // TrackElemType::Up25RightBanked
        TrackElemType::Waterfall,
        TrackElemType::Rapids,
        TrackElemType::OnRidePhoto,
        TrackElemType::Down25RightBanked, // TrackElemType::Down25LeftBanked
        TrackElemType::Down25LeftBanked, // TrackElemType::Down25RightBanked
        TrackElemType::Watersplash,
        TrackElemType::FlatToUp60LongBase,
        TrackElemType::Up60ToFlatLongBase,
        TrackElemType::Whirlpool,
        TrackElemType::Down60ToFlatLongBase,
        TrackElemType::FlatToDown60LongBase,
        TrackElemType::CableLiftHill,
        TrackElemType::ReverseFreefallSlope,
        TrackElemType::ReverseFreefallVertical,
        TrackElemType::Up90,
        TrackElemType::Down90,
        TrackElemType::Up60ToUp90,
        TrackElemType::Down90ToDown60,
        TrackElemType::Up90ToUp60,
        TrackElemType::Down60ToDown90,
        TrackElemType::BrakeForDrop,
        TrackElemType::RightEighthToDiag, // TrackElemType::LeftEighthToDiag
        TrackElemType::LeftEighthToDiag, // TrackElemType::RightEighthToDiag
        TrackElemType::RightEighthToOrthogonal, // TrackElemType::LeftEighthToOrthogonal
        TrackElemType::LeftEighthToOrthogonal, // TrackElemType::RightEighthToOrthogonal
        TrackElemType::RightEighthBankToDiag, // TrackElemType::LeftEighthBankToDiag
        TrackElemType::LeftEighthBankToDiag, // TrackElemType::RightEighthBankToDiag
        TrackElemType::RightEighthBankToOrthogonal, // TrackElemType::LeftEighthBankToOrthogonal
        TrackElemType::LeftEighthBankToOrthogonal, // TrackElemType::RightEighthBankToOrthogonal
        TrackElemType::DiagFlat,
        TrackElemType::DiagUp25,
        TrackElemType::DiagUp60,
        TrackElemType::DiagFlatToUp25,
        TrackElemType::DiagUp25ToUp60,
        TrackElemType::DiagUp60ToUp25,
        TrackElemType::DiagUp25ToFlat,
        TrackElemType::DiagDown25,
        TrackElemType::DiagDown60,
        TrackElemType::DiagFlatToDown25,
        TrackElemType::DiagDown25ToDown60,
        TrackElemType::DiagDown60ToDown25,
        TrackElemType::DiagDown25ToFlat,
        TrackElemType::DiagFlatToUp60,
        TrackElemType::DiagUp60ToFlat,
        TrackElemType::DiagFlatToDown60,
        TrackElemType::DiagDown60ToFlat,
        TrackElemType::DiagFlatToRightBank, // TrackElemType::DiagFlatToLeftBank
        TrackElemType::DiagFlatToLeftBank, // TrackElemType::DiagFlatToRightBank
        TrackElemType::DiagRightBankToFlat, // TrackElemType::DiagLeftBankToFlat
        TrackElemType::DiagLeftBankToFlat, // TrackElemType::DiagRightBankToFlat
        TrackElemType::DiagRightBankToUp25, // TrackElemType::DiagLeftBankToUp25
        TrackElemType::DiagLeftBankToUp25, // TrackElemType::DiagRightBankToUp25
        TrackElemType::DiagUp25ToRightBank, // TrackElemType::DiagUp25ToLeftBank
        TrackElemType::DiagUp25ToLeftBank, // TrackElemType::DiagUp25ToRightBank
        TrackElemType::DiagRightBankToDown25, // TrackElemType::DiagLeftBankToDown25
        TrackElemType::DiagLeftBankToDown25, // TrackElemType::DiagRightBankToDown25
        TrackElemType::DiagDown25ToRightBank, // TrackElemType::DiagDown25ToLeftBank
        TrackElemType::DiagDown25ToLeftBank, // TrackElemType::DiagDown25ToRightBank
        TrackElemType::DiagRightBank, // TrackElemType::DiagLeftBank
        TrackElemType::DiagLeftBank, // TrackElemType::DiagRightBank
        TrackElemType::LogFlumeReverser,
        TrackElemType::SpinningTunnel,
        TrackElemType::RightBarrelRollUpToDown, // TrackElemType::LeftBarrelRollUpToDown
        TrackElemType::LeftBarrelRollUpToDown, // TrackElemType::RightBarrelRollUpToDown
        TrackElemType::RightBarrelRollDownToUp, // TrackElemType::LeftBarrelRollDownToUp
        TrackElemType::LeftBarrelRollDownToUp, // TrackElemType::RightBarrelRollDownToUp
        TrackElemType::RightBankToRightQuarterTurn3TilesUp25, // TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25
        TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25, // TrackElemType::RightBankToRightQuarterTurn3TilesUp25
        TrackElemType::RightQuarterTurn3TilesDown25ToRightBank, // TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank
        TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank, // TrackElemType::RightQuarterTurn3TilesDown25ToRightBank
        TrackElemType::PoweredLift,
        TrackElemType::RightLargeHalfLoopUp, // TrackElemType::LeftLargeHalfLoopUp
        TrackElemType::LeftLargeHalfLoopUp, // TrackElemType::RightLargeHalfLoopUp
        TrackElemType::RightLargeHalfLoopDown, // TrackElemType::LeftLargeHalfLoopDown
        TrackElemType::LeftLargeHalfLoopDown, // TrackElemType::RightLargeHalfLoopDown
        TrackElemType::RightFlyerTwistUp, // TrackElemType::LeftFlyerTwistUp
        TrackElemType::LeftFlyerTwistUp, // TrackElemType::RightFlyerTwistUp
        TrackElemType::RightFlyerTwistDown, // TrackElemType::LeftFlyerTwistDown
        TrackElemType::LeftFlyerTwistDown, // TrackElemType::RightFlyerTwistDown
        TrackElemType::FlyerHalfLoopUninvertedUp,
        TrackElemType::FlyerHalfLoopInvertedDown,
        TrackElemType::RightFlyerCorkscrewUp, // TrackElemType::LeftFlyerCorkscrewUp
        TrackElemType::LeftFlyerCorkscrewUp, // TrackElemType::RightFlyerCorkscrewUp
        TrackElemType::RightFlyerCorkscrewDown, // TrackElemType::LeftFlyerCorkscrewDown
        TrackElemType::LeftFlyerCorkscrewDown, // TrackElemType::RightFlyerCorkscrewDown
        TrackElemType::HeartLineTransferUp,
        TrackElemType::HeartLineTransferDown,
        TrackElemType::RightHeartLineRoll, // TrackElemType::LeftHeartLineRoll
        TrackElemType::LeftHeartLineRoll, // TrackElemType::RightHeartLineRoll
        TrackElemType::MinigolfHoleA,
        TrackElemType::MinigolfHoleB,
        TrackElemType::MinigolfHoleC,
        TrackElemType::MinigolfHoleE, // TrackElemType::MinigolfHoleD
        TrackElemType::MinigolfHoleD, // TrackElemType::MinigolfHoleE
        TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop,
        TrackElemType::Up90ToInvertedFlatQuarterLoop,
        TrackElemType::InvertedFlatToDown90QuarterLoop,
        TrackElemType::RightCurvedLiftHill, // TrackElemType::LeftCurvedLiftHill
        TrackElemType::LeftCurvedLiftHill, // TrackElemType::RightCurvedLiftHill
        TrackElemType::RightReverser, // TrackElemType::LeftReverser
        TrackElemType::LeftReverser, // TrackElemType::RightReverser
        TrackElemType::AirThrustTopCap,
        TrackElemType::AirThrustVerticalDown,
        TrackElemType::AirThrustVerticalDownToLevel,
        TrackElemType::BlockBrakes,
        TrackElemType::RightBankedQuarterTurn3TileUp25, // TrackElemType::LeftBankedQuarterTurn3TileUp25
        TrackElemType::LeftBankedQuarterTurn3TileUp25, // TrackElemType::RightBankedQuarterTurn3TileUp25
        TrackElemType::RightBankedQuarterTurn3TileDown25, // TrackElemType::LeftBankedQuarterTurn3TileDown25
        TrackElemType::LeftBankedQuarterTurn3TileDown25, // TrackElemType::RightBankedQuarterTurn3TileDown25
        TrackElemType::RightBankedQuarterTurn5TileUp25, // TrackElemType::LeftBankedQuarterTurn5TileUp25
        TrackElemType::LeftBankedQuarterTurn5TileUp25, // TrackElemType::RightBankedQuarterTurn5TileUp25
        TrackElemType::RightBankedQuarterTurn5TileDown25, // TrackElemType::LeftBankedQuarterTurn5TileDown25
        TrackElemType::LeftBankedQuarterTurn5TileDown25, // TrackElemType::RightBankedQuarterTurn5TileDown25
        TrackElemType::Up25ToRightBankedUp25, // TrackElemType::Up25ToLeftBankedUp25
        TrackElemType::Up25ToLeftBankedUp25, // TrackElemType::Up25ToRightBankedUp25
        TrackElemType::RightBankedUp25ToUp25, // TrackElemType::LeftBankedUp25ToUp25
        TrackElemType::LeftBankedUp25ToUp25, // TrackElemType::RightBankedUp25ToUp25
        TrackElemType::Down25ToRightBankedDown25, // TrackElemType::Down25ToLeftBankedDown25
        TrackElemType::Down25ToLeftBankedDown25, // TrackElemType::Down25ToRightBankedDown25
        TrackElemType::RightBankedDown25ToDown25, // TrackElemType::LeftBankedDown25ToDown25
        TrackElemType::LeftBankedDown25ToDown25, // TrackElemType::RightBankedDown25ToDown25
        TrackElemType::RightBankedFlatToRightBankedUp25, // TrackElemType::LeftBankedFlatToLeftBankedUp25
        TrackElemType::LeftBankedFlatToLeftBankedUp25, // TrackElemType::RightBankedFlatToRightBankedUp25
        TrackElemType::RightBankedUp25ToRightBankedFlat, // TrackElemType::LeftBankedUp25ToLeftBankedFlat
        TrackElemType::LeftBankedUp25ToLeftBankedFlat, // TrackElemType::RightBankedUp25ToRightBankedFlat
        TrackElemType::RightBankedFlatToRightBankedDown25, // TrackElemType::LeftBankedFlatToLeftBankedDown25
        TrackElemType::LeftBankedFlatToLeftBankedDown25, // TrackElemType::RightBankedFlatToRightBankedDown25
        TrackElemType::RightBankedDown25ToRightBankedFlat, // TrackElemType::LeftBankedDown25ToLeftBankedFlat
        TrackElemType::LeftBankedDown25ToLeftBankedFlat, // TrackElemType::RightBankedDown25ToRightBankedFlat
        TrackElemType::FlatToRightBankedUp25, // TrackElemType::FlatToLeftBankedUp25
        TrackElemType::FlatToLeftBankedUp25, // TrackElemType::FlatToRightBankedUp25
        TrackElemType::RightBankedUp25ToFlat, // TrackElemType::LeftBankedUp25ToFlat
        TrackElemType::LeftBankedUp25ToFlat, // TrackElemType::RightBankedUp25ToFlat
        TrackElemType::FlatToRightBankedDown25, // TrackElemType::FlatToLeftBankedDown25
        TrackElemType::FlatToLeftBankedDown25, // TrackElemType::FlatToRightBankedDown25
        TrackElemType::RightBankedDown25ToFlat, // TrackElemType::LeftBankedDown25ToFlat
        TrackElemType::LeftBankedDown25ToFlat, // TrackElemType::RightBankedDown25ToFlat
        TrackElemType::RightQuarterTurn1TileUp90, // TrackElemType::LeftQuarterTurn1TileUp90
        TrackElemType::LeftQuarterTurn1TileUp90, // TrackElemType::RightQuarterTurn1TileUp90
        TrackElemType::RightQuarterTurn1TileDown90, // TrackElemType::LeftQuarterTurn1TileDown90
        TrackElemType::LeftQuarterTurn1TileDown90, // TrackElemType::RightQuarterTurn1TileDown90
        TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop,
        TrackElemType::MultiDimFlatToDown90QuarterLoop,
        TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop,
        TrackElemType::RotationControlToggle,
        TrackElemType::FlatTrack1x4A, // TrackElemType::FlatTrack1x4A
        TrackElemType::FlatTrack2x2, // TrackElemType::FlatTrack2x2
        TrackElemType::FlatTrack4x4, // TrackElemType::FlatTrack4x4
        TrackElemType::FlatTrack2x4, // TrackElemType::FlatTrack2x4
        TrackElemType::FlatTrack1x5, // TrackElemType::FlatTrack1x5
        TrackElemType::FlatTrack1x1A, // TrackElemType::FlatTrack1x1A
        TrackElemType::FlatTrack1x4B, // TrackElemType::FlatTrack1x4B
        TrackElemType::FlatTrack1x1B, // TrackElemType::FlatTrack1x1B
        TrackElemType::FlatTrack1x4C, // TrackElemType::FlatTrack1x4C
        TrackElemType::FlatTrack3x3, // TrackElemType::FlatTrack3x3
        TrackElemType::RightLargeCorkscrewUp, // TrackElemType::LeftLargeCorkscrewUp
        TrackElemType::LeftLargeCorkscrewUp, // TrackElemType::RightLargeCorkscrewUp
        TrackElemType::RightLargeCorkscrewDown, // TrackElemType::LeftLargeCorkscrewDown
        TrackElemType::LeftLargeCorkscrewDown, // TrackElemType::RightLargeCorkscrewDown
        TrackElemType::RightMediumHalfLoopUp, // TrackElemType::LeftMediumHalfLoopUp
        TrackElemType::LeftMediumHalfLoopUp, // TrackElemType::RightMediumHalfLoopUp
        TrackElemType::RightMediumHalfLoopDown, // TrackElemType::LeftMediumHalfLoopDown
        TrackElemType::LeftMediumHalfLoopDown, // TrackElemType::RightMediumHalfLoopDown
        TrackElemType::RightZeroGRollUp, // TrackElemType::LeftZeroGRollUp
        TrackElemType::LeftZeroGRollUp, // TrackElemType::RightZeroGRollUp
        TrackElemType::RightZeroGRollDown, // TrackElemType::LeftZeroGRollDown
        TrackElemType::LeftZeroGRollDown, // TrackElemType::RightZeroGRollDown
        TrackElemType::RightLargeZeroGRollUp, // TrackElemType::LeftLargeZeroGRollUp
        TrackElemType::LeftLargeZeroGRollUp, // TrackElemType::RightLargeZeroGRollUp
        TrackElemType::RightLargeZeroGRollDown, // TrackElemType::LeftLargeZeroGRollDown
        TrackElemType::LeftLargeZeroGRollDown, // TrackElemType::RightLargeZeroGRollDown
        TrackElemType::RightFlyerLargeHalfLoopUninvertedUp, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp
        TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp, // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp
        TrackElemType::RightFlyerLargeHalfLoopInvertedDown, // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown
        TrackElemType::LeftFlyerLargeHalfLoopInvertedDown, // TrackElemType::RightFlyerLargeHalfLoopInvertedDown
        TrackElemType::RightFlyerLargeHalfLoopInvertedUp, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp
        TrackElemType::LeftFlyerLargeHalfLoopInvertedUp, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp
        TrackElemType::RightFlyerLargeHalfLoopUninvertedDown, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown
        TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown
        TrackElemType::FlyerHalfLoopInvertedUp,
        TrackElemType::FlyerHalfLoopUninvertedDown,
        TrackElemType::RightEighthToDiagUp25,          // TrackElemType::LeftEighthToDiagUp25           
        TrackElemType::LeftEighthToDiagUp25,           // TrackElemType::RightEighthToDiagUp25        
        TrackElemType::RightEighthToDiagDown25,        // TrackElemType::LeftEighthToDiagDown25       
        TrackElemType::LeftEighthToDiagDown25,         // TrackElemType::RightEighthToDiagDown25      
        TrackElemType::RightEighthToOrthogonalUp25,    // TrackElemType::LeftEighthToOrthogonalUp25   
        TrackElemType::LeftEighthToOrthogonalUp25,     // TrackElemType::RightEighthToOrthogonalUp25  
        TrackElemType::RightEighthToOrthogonalDown25,  // TrackElemType::LeftEighthToOrthogonalDown25
        TrackElemType::LeftEighthToOrthogonalDown25,   // TrackElemType::RightEighthToOrthogonalDown25
        TrackElemType::DiagUp25ToRightBankedUp25,             // TrackElemType::DiagUp25ToRightBankedUp25
        TrackElemType::DiagUp25ToLeftBankedUp25,              // TrackElemType::DiagUp25ToLeftBankedUp25
        TrackElemType::DiagRightBankedUp25ToUp25,             // TrackElemType::DiagRightBankedUp25ToUp25
        TrackElemType::DiagLeftBankedUp25ToUp25,              // TrackElemType::DiagLeftBankedUp25ToUp25
        TrackElemType::DiagDown25ToRightBankedDown25,         // TrackElemType::DiagDown25ToRightBankedDown25
        TrackElemType::DiagDown25ToLeftBankedDown25,          // TrackElemType::DiagDown25ToLeftBankedDown25
        TrackElemType::DiagRightBankedDown25ToDown25,         // TrackElemType::DiagRightBankedDown25ToDown25
        TrackElemType::DiagLeftBankedDown25ToDown25,          // TrackElemType::DiagLeftBankedDown25ToDown25
        TrackElemType::DiagRightBankedFlatToRightBankedUp25,  // TrackElemType::DiagRightBankedFlatToRightBankedUp25
        TrackElemType::DiagLeftBankedFlatToLeftBankedUp25,    // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25
        TrackElemType::DiagRightBankedUp25ToRightBankedFlat,  // TrackElemType::DiagRightBankedUp25ToRightBankedFlat
        TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat,    // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat
        TrackElemType::DiagRightBankedFlatToRightBankedDown25,// TrackElemType::DiagRightBankedFlatToRightBankedDown25
        TrackElemType::DiagLeftBankedFlatToLeftBankedDown25,  // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25
        TrackElemType::DiagRightBankedDown25ToRightBankedFlat,// TrackElemType::DiagRightBankedDown25ToRightBankedFlat
        TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat,  // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat
        TrackElemType::DiagFlatToRightBankedUp25,             // TrackElemType::DiagFlatToRightBankedUp25
        TrackElemType::DiagFlatToLeftBankedUp25,              // TrackElemType::DiagFlatToLeftBankedUp25
        TrackElemType::DiagRightBankedUp25ToFlat,             // TrackElemType::DiagRightBankedUp25ToFlat
        TrackElemType::DiagLeftBankedUp25ToFlat,              // TrackElemType::DiagLeftBankedUp25ToFlat
        TrackElemType::DiagFlatToRightBankedDown25,           // TrackElemType::DiagFlatToRightBankedDown25
        TrackElemType::DiagFlatToLeftBankedDown25,            // TrackElemType::DiagFlatToLeftBankedDown25
        TrackElemType::DiagRightBankedDown25ToFlat,           // TrackElemType::DiagRightBankedDown25ToFlat
        TrackElemType::DiagLeftBankedDown25ToFlat,            // TrackElemType::DiagLeftBankedDown25ToFlat
        TrackElemType::DiagUp25RightBanked,                   // TrackElemType::DiagUp25RightBanked
        TrackElemType::DiagUp25LeftBanked,                    // TrackElemType::DiagUp25LeftBanked 
        TrackElemType::DiagDown25RightBanked,                 // TrackElemType::DiagDown25RightBanked
        TrackElemType::DiagDown25LeftBanked,                  // TrackElemType::DiagDown25LeftBanked
        TrackElemType::RightEighthBankToDiagUp25,             // TrackElemType::RightEighthBankToDiagUp25
        TrackElemType::LeftEighthBankToDiagUp25,              // TrackElemType::LeftEighthBankToDiagUp25
        TrackElemType::RightEighthBankToDiagDown25,           // TrackElemType::RightEighthBankToDiagDown25
        TrackElemType::LeftEighthBankToDiagDown25,            // TrackElemType::LeftEighthBankToDiagDown25
        TrackElemType::RightEighthBankToOrthogonalUp25,       // TrackElemType::RightEighthBankToOrthogonalUp25
        TrackElemType::LeftEighthBankToOrthogonalUp25,        // TrackElemType::LeftEighthBankToOrthogonalUp25 
        TrackElemType::RightEighthBankToOrthogonalDown25,     // TrackElemType::RightEighthBankToOrthogonalDown25
        TrackElemType::LeftEighthBankToOrthogonalDown25,      // TrackElemType::LeftEighthBankToOrthogonalDown25
        TrackElemType::DiagBrakes,
        TrackElemType::DiagBlockBrakes,
    };
    static_assert(std::size(TrackElementMirrorMap) == TrackElemType::Count);
    
    /** rct2: 0x00999694 */
    static constexpr uint32_t TrackHeightMarkerPositions[] = {
        (1 << 0), // TrackElemType::Flat
        (1 << 0), // TrackElemType::EndStation
        (1 << 0), // TrackElemType::BeginStation
        (1 << 0), // TrackElemType::MiddleStation
        (1 << 0), // TrackElemType::Up25
        (1 << 0), // TrackElemType::Up60
        (1 << 0), // TrackElemType::FlatToUp25
        (1 << 0), // TrackElemType::Up25ToUp60
        (1 << 0), // TrackElemType::Up60ToUp25
        (1 << 0), // TrackElemType::Up25ToFlat
        (1 << 0), // TrackElemType::Down25
        (1 << 0), // TrackElemType::Down60
        (1 << 0), // TrackElemType::FlatToDown25
        (1 << 0), // TrackElemType::Down25ToDown60
        (1 << 0), // TrackElemType::Down60ToDown25
        (1 << 0), // TrackElemType::Down25ToFlat
        (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterTurn5Tiles
        (1 << 0) | (1 << 6), // TrackElemType::RightQuarterTurn5Tiles
        (1 << 0), // TrackElemType::FlatToLeftBank
        (1 << 0), // TrackElemType::FlatToRightBank
        (1 << 0), // TrackElemType::LeftBankToFlat
        (1 << 0), // TrackElemType::RightBankToFlat
        (1 << 0) | (1 << 6), // TrackElemType::BankedLeftQuarterTurn5Tiles
        (1 << 0) | (1 << 6), // TrackElemType::BankedRightQuarterTurn5Tiles
        (1 << 0), // TrackElemType::LeftBankToUp25
        (1 << 0), // TrackElemType::RightBankToUp25
        (1 << 0), // TrackElemType::Up25ToLeftBank
        (1 << 0), // TrackElemType::Up25ToRightBank
        (1 << 0), // TrackElemType::LeftBankToDown25
        (1 << 0), // TrackElemType::RightBankToDown25
        (1 << 0), // TrackElemType::Down25ToLeftBank
        (1 << 0), // TrackElemType::Down25ToRightBank
        (1 << 0), // TrackElemType::LeftBank
        (1 << 0), // TrackElemType::RightBank
        (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterTurn5TilesUp25
        (1 << 0) | (1 << 6), // TrackElemType::RightQuarterTurn5TilesUp25
        (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterTurn5TilesDown25
        (1 << 0) | (1 << 6), // TrackElemType::RightQuarterTurn5TilesDown25
        (1 << 0) | (1 << 3), // TrackElemType::SBendLeft
        (1 << 0) | (1 << 3), // TrackElemType::SBendRight
        (1 << 0) | (1 << 9), // TrackElemType::LeftVerticalLoop
        (1 << 0) | (1 << 9), // TrackElemType::RightVerticalLoop
        (1 << 0) | (1 << 3), // TrackElemType::LeftQuarterTurn3Tiles
        (1 << 0) | (1 << 3), // TrackElemType::RightQuarterTurn3Tiles
        (1 << 0) | (1 << 3), // TrackElemType::LeftBankedQuarterTurn3Tiles
        (1 << 0) | (1 << 3), // TrackElemType::RightBankedQuarterTurn3Tiles
        (1 << 0) | (1 << 3), // TrackElemType::LeftQuarterTurn3TilesUp25
        (1 << 0) | (1 << 3), // TrackElemType::RightQuarterTurn3TilesUp25
        (1 << 0) | (1 << 3), // TrackElemType::LeftQuarterTurn3TilesDown25
        (1 << 0) | (1 << 3), // TrackElemType::RightQuarterTurn3TilesDown25
        (1 << 0), // TrackElemType::LeftQuarterTurn1Tile
        (1 << 0), // TrackElemType::RightQuarterTurn1Tile
        (1 << 0) | (1 << 2), // TrackElemType::LeftTwistDownToUp
        (1 << 0) | (1 << 2), // TrackElemType::RightTwistDownToUp
        (1 << 0) | (1 << 2), // TrackElemType::LeftTwistUpToDown
        (1 << 0) | (1 << 2), // TrackElemType::RightTwistUpToDown
        (1 << 0) | (1 << 3), // TrackElemType::HalfLoopUp
        (1 << 0) | (1 << 3), // TrackElemType::HalfLoopDown
        (1 << 0) | (1 << 2), // TrackElemType::LeftCorkscrewUp
        (1 << 0) | (1 << 2), // TrackElemType::RightCorkscrewUp
        (1 << 0) | (1 << 2), // TrackElemType::LeftCorkscrewDown
        (1 << 0) | (1 << 2), // TrackElemType::RightCorkscrewDown
        (1 << 0), // TrackElemType::FlatToUp60
        (1 << 0), // TrackElemType::Up60ToFlat
        (1 << 0), // TrackElemType::FlatToDown60
        (1 << 0), // TrackElemType::Down60ToFlat
        (1 << 1) | (1 << 3) | (1 << 6) | (1 << 7), // TrackElemType::TowerBase
        (1 << 0), // TrackElemType::TowerSection
        (1 << 0), // TrackElemType::FlatCovered
        (1 << 0), // TrackElemType::Up25Covered
        (1 << 0), // TrackElemType::Up60Covered
        (1 << 0), // TrackElemType::FlatToUp25Covered
        (1 << 0), // TrackElemType::Up25ToUp60Covered
        (1 << 0), // TrackElemType::Up60ToUp25Covered
        (1 << 0), // TrackElemType::Up25ToFlatCovered
        (1 << 0), // TrackElemType::Down25Covered
        (1 << 0), // TrackElemType::Down60Covered
        (1 << 0), // TrackElemType::FlatToDown25Covered
        (1 << 0), // TrackElemType::Down25ToDown60Covered
        (1 << 0), // TrackElemType::Down60ToDown25Covered
        (1 << 0), // TrackElemType::Down25ToFlatCovered
        (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterTurn5TilesCovered
        (1 << 0) | (1 << 6), // TrackElemType::RightQuarterTurn5TilesCovered
        (1 << 0) | (1 << 3), // TrackElemType::SBendLeftCovered
        (1 << 0) | (1 << 3), // TrackElemType::SBendRightCovered
        (1 << 0) | (1 << 3), // TrackElemType::LeftQuarterTurn3TilesCovered
        (1 << 0) | (1 << 3), // TrackElemType::RightQuarterTurn3TilesCovered
        (1 << 0) | (1 << 7), // TrackElemType::LeftHalfBankedHelixUpSmall
        (1 << 0) | (1 << 7), // TrackElemType::RightHalfBankedHelixUpSmall
        (1 << 0) | (1 << 7), // TrackElemType::LeftHalfBankedHelixDownSmall
        (1 << 0) | (1 << 7), // TrackElemType::RightHalfBankedHelixDownSmall
        (1 << 0) | (1 << 13), // TrackElemType::LeftHalfBankedHelixUpLarge
        (1 << 0) | (1 << 13), // TrackElemType::RightHalfBankedHelixUpLarge
        (1 << 0) | (1 << 13), // TrackElemType::LeftHalfBankedHelixDownLarge
        (1 << 0) | (1 << 13), // TrackElemType::RightHalfBankedHelixDownLarge
        (1 << 0), // TrackElemType::LeftQuarterTurn1TileUp60
        (1 << 0), // TrackElemType::RightQuarterTurn1TileUp60
        (1 << 0), // TrackElemType::LeftQuarterTurn1TileDown60
        (1 << 0), // TrackElemType::RightQuarterTurn1TileDown60
        (1 << 0), // TrackElemType::Brakes
        (1 << 0), // TrackElemType::Booster
        (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7) | (1 << 8) | (1 << 9) | (1 << 10) | (1 << 11) | (1 << 12) | (1 << 13) | (1 << 14) | (1 << 15), // Maze
        (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterBankedHelixLargeUp
        (1 << 0) | (1 << 6), // TrackElemType::RightQuarterBankedHelixLargeUp
        (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterBankedHelixLargeDown
        (1 << 0) | (1 << 6), // TrackElemType::RightQuarterBankedHelixLargeDown
        (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterHelixLargeUp
        (1 << 0) | (1 << 6), // TrackElemType::RightQuarterHelixLargeUp
        (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterHelixLargeDown
        (1 << 0) | (1 << 6), // TrackElemType::RightQuarterHelixLargeDown
        (1 << 0), // TrackElemType::Up25LeftBanked
        (1 << 0) | (1 << 3) | (1 << 12) | (1 << 15), // TrackElemType::Up25RightBanked
        (1 << 0), // TrackElemType::Waterfall
        (1 << 0), // TrackElemType::Rapids
        (1 << 0), // TrackElemType::OnRidePhoto
        (1 << 0) | (1 << 7), // TrackElemType::Down25LeftBanked
        (1 << 0), // TrackElemType::Down25RightBanked
        (1 << 0) | (1 << 4), // TrackElemType::Watersplash
        (1 << 0) | (1 << 3), // TrackElemType::FlatToUp60LongBase
        (1 << 0) | (1 << 3), // TrackElemType::Up60ToFlatLongBase
        (1 << 0), // TrackElemType::Whirlpool
        (1 << 0) | (1 << 3), // TrackElemType::Down60ToFlatLongBase
        (1 << 0) | (1 << 3), // TrackElemType::FlatToUp60LongBase
        (1 << 0) | (1 << 3), // TrackElemType::CableLiftHill
        (1 << 0) | (1 << 5), // TrackElemType::ReverseFreefallSlope
        (1 << 0), // TrackElemType::ReverseFreefallVertical
        (1 << 0), // TrackElemType::Up90
        (1 << 0), // TrackElemType::Down90
        (1 << 0), // TrackElemType::Up60ToUp90
        (1 << 0), // TrackElemType::Down90ToDown60
        (1 << 0), // TrackElemType::Up90ToUp60
        (1 << 0), // TrackElemType::Down60ToDown90
        (1 << 0), // TrackElemType::BrakeForDrop
        (1 << 0) | (1 << 4), // TrackElemType::LeftEighthToDiag
        (1 << 0) | (1 << 4), // TrackElemType::RightEighthToDiag
        (1 << 0) | (1 << 4), // TrackElemType::LeftEighthToOrthogonal
        (1 << 0) | (1 << 4), // TrackElemType::RightEighthToOrthogonal
        (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToDiag
        (1 << 0) | (1 << 4), // TrackElemType::RightEighthBankToDiag
        (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToOrthogonal
        (1 << 0) | (1 << 4), // TrackElemType::RightEighthBankToOrthogonal
        (1 << 0), // TrackElemType::DiagFlat
        (1 << 0), // TrackElemType::DiagUp25
        (1 << 0), // TrackElemType::DiagUp60
        (1 << 0), // TrackElemType::DiagFlatToUp25
        (1 << 0), // TrackElemType::DiagUp25ToUp60
        (1 << 0), // TrackElemType::DiagUp60ToUp25
        (1 << 0), // TrackElemType::DiagUp25ToFlat
        (1 << 3), // TrackElemType::DiagDown25
        (1 << 3), // TrackElemType::DiagDown60
        (1 << 3), // TrackElemType::DiagFlatToDown25
        (1 << 3), // TrackElemType::DiagDown25ToDown60
        (1 << 3), // TrackElemType::DiagDown60ToDown25
        (1 << 3), // TrackElemType::DiagDown25ToFlat
        (1 << 0), // TrackElemType::DiagFlatToUp60
        (1 << 0), // TrackElemType::DiagUp60ToFlat
        (1 << 3), // TrackElemType::DiagFlatToDown60
        (1 << 3), // TrackElemType::DiagDown60ToFlat
        (1 << 0), // TrackElemType::DiagFlatToLeftBank
        (1 << 0), // TrackElemType::DiagFlatToRightBank
        (1 << 0), // TrackElemType::DiagLeftBankToFlat
        (1 << 0), // TrackElemType::DiagRightBankToFlat
        (1 << 0), // TrackElemType::DiagLeftBankToUp25
        (1 << 0), // TrackElemType::DiagRightBankToUp25
        (1 << 0), // TrackElemType::DiagUp25ToLeftBank
        (1 << 0), // TrackElemType::DiagUp25ToRightBank
        (1 << 3), // TrackElemType::DiagLeftBankToDown25
        (1 << 3), // TrackElemType::DiagRightBankToDown25
        (1 << 3), // TrackElemType::DiagDown25ToLeftBank
        (1 << 3), // TrackElemType::DiagDown25ToRightBank
        (1 << 0), // TrackElemType::DiagLeftBank
        (1 << 0), // TrackElemType::DiagRightBank
        (1 << 0), // TrackElemType::LogFlumeReverser
        (1 << 0), // TrackElemType::SpinningTunnel
        (1 << 0) | (1 << 2), // TrackElemType::LeftBarrelRollUpToDown
        (1 << 0) | (1 << 2), // TrackElemType::RightBarrelRollUpToDown
        (1 << 0) | (1 << 2), // TrackElemType::LeftBarrelRollDownToUp
        (1 << 0) | (1 << 2), // TrackElemType::RightBarrelRollDownToUp
        (1 << 0) | (1 << 3), // TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25
        (1 << 0) | (1 << 3), // TrackElemType::RightBankToRightQuarterTurn3TilesUp25
        (1 << 0) | (1 << 3), // TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank
        (1 << 0) | (1 << 3), // TrackElemType::RightQuarterTurn3TilesDown25ToRightBank
        (1 << 0), // TrackElemType::PoweredLift
        (1 << 0) | (1 << 6), // TrackElemType::LeftLargeHalfLoopUp
        (1 << 0) | (1 << 6), // TrackElemType::RightLargeHalfLoopUp
        (1 << 0) | (1 << 6), // TrackElemType::LeftLargeHalfLoopDown
        (1 << 0) | (1 << 6), // TrackElemType::RightLargeHalfLoopDown
        (1 << 0) | (1 << 2), // TrackElemType::LeftFlyerTwistUp
        (1 << 0) | (1 << 2), // TrackElemType::RightFlyerTwistUp
        (1 << 0) | (1 << 2), // TrackElemType::LeftFlyerTwistDown
        (1 << 0) | (1 << 2), // TrackElemType::RightFlyerTwistDown
        (1 << 0) | (1 << 3), // TrackElemType::FlyerHalfLoopUninvertedUp
        (1 << 0) | (1 << 3), // TrackElemType::FlyerHalfLoopInvertedDown
        (1 << 0) | (1 << 2), // TrackElemType::LeftFlyerCorkscrewUp
        (1 << 0) | (1 << 2), // TrackElemType::RightFlyerCorkscrewUp
        (1 << 0) | (1 << 2), // TrackElemType::LeftFlyerCorkscrewDown
        (1 << 0) | (1 << 2), // TrackElemType::RightFlyerCorkscrewDown
        (1 << 0) | (1 << 3), // TrackElemType::HeartLineTransferUp
        (1 << 0) | (1 << 3), // TrackElemType::HeartLineTransferDown
        (1 << 0) | (1 << 5), // TrackElemType::LeftHeartLineRoll
        (1 << 0) | (1 << 5), // TrackElemType::RightHeartLineRoll
        (1 << 0) | (1 << 1), // TrackElemType::MinigolfHoleA
        (1 << 0) | (1 << 1), // TrackElemType::MinigolfHoleB
        (1 << 0) | (1 << 1), // TrackElemType::MinigolfHoleC
        (1 << 0) | (1 << 2), // TrackElemType::MinigolfHoleD
        (1 << 0) | (1 << 2), // TrackElemType::MinigolfHoleE
        (1 << 0) | (1 << 2), // TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop
        (1 << 0) | (1 << 2), // TrackElemType::Up90ToInvertedFlatQuarterLoop
        (1 << 0) | (1 << 2), // TrackElemType::InvertedFlatToDown90QuarterLoop
        (1 << 0) | (1 << 3), // TrackElemType::LeftCurvedLiftHill
        (1 << 0) | (1 << 3), // TrackElemType::RightCurvedLiftHill
        (1 << 0) | (1 << 5), // TrackElemType::LeftReverser
        (1 << 0) | (1 << 5), // TrackElemType::RightReverser
        (1 << 0) | (1 << 3), // TrackElemType::AirThrustTopCap
        (1 << 0), // TrackElemType::AirThrustVerticalDown
        (1 << 0) | (1 << 5), // TrackElemType::AirThrustVerticalDownToLevel
        (1 << 0), // TrackElemType::BlockBrakes
        (1 << 0) | (1 << 3), // TrackElemType::LeftBankedQuarterTurn3TileUp25
        (1 << 0) | (1 << 3), // TrackElemType::RightBankedQuarterTurn3TileUp25
        (1 << 0) | (1 << 3), // TrackElemType::LeftBankedQuarterTurn3TileDown25
        (1 << 0) | (1 << 3), // TrackElemType::RightBankedQuarterTurn3TileDown25
        (1 << 0) | (1 << 6), // TrackElemType::LeftBankedQuarterTurn5TileUp25
        (1 << 0) | (1 << 6), // TrackElemType::RightBankedQuarterTurn5TileUp25
        (1 << 0) | (1 << 6), // TrackElemType::LeftBankedQuarterTurn5TileDown25
        (1 << 0) | (1 << 6), // TrackElemType::RightBankedQuarterTurn5TileDown25
        (1 << 0), // TrackElemType::Up25ToLeftBankedUp25
        (1 << 0), // TrackElemType::Up25ToRightBankedUp25
        (1 << 0), // TrackElemType::LeftBankedUp25ToUp25
        (1 << 0), // TrackElemType::RightBankedUp25ToUp25
        (1 << 0), // TrackElemType::Down25ToLeftBankedDown25
        (1 << 0), // TrackElemType::Down25ToRightBankedDown25
        (1 << 0), // TrackElemType::LeftBankedDown25ToDown25
        (1 << 0), // TrackElemType::RightBankedDown25ToDown25
        (1 << 0), // TrackElemType::LeftBankedFlatToLeftBankedUp25
        (1 << 0), // TrackElemType::RightBankedFlatToRightBankedUp25
        (1 << 0), // TrackElemType::LeftBankedUp25ToLeftBankedFlat
        (1 << 0), // TrackElemType::RightBankedUp25ToRightBankedFlat
        (1 << 0), // TrackElemType::LeftBankedFlatToLeftBankedDown25
        (1 << 0), // TrackElemType::RightBankedFlatToRightBankedDown25
        (1 << 0), // TrackElemType::LeftBankedDown25ToLeftBankedFlat
        (1 << 0), // TrackElemType::RightBankedDown25ToRightBankedFlat
        (1 << 0), // TrackElemType::FlatToLeftBankedUp25
        (1 << 0), // TrackElemType::FlatToRightBankedUp25
        (1 << 0), // TrackElemType::LeftBankedUp25ToFlat
        (1 << 0), // TrackElemType::RightBankedUp25ToFlat
        (1 << 0), // TrackElemType::FlatToLeftBankedDown25
        (1 << 0), // TrackElemType::FlatToRightBankedDown25
        (1 << 0), // TrackElemType::LeftBankedDown25ToFlat
        (1 << 0), // TrackElemType::RightBankedDown25ToFlat
        (1 << 0), // TrackElemType::LeftQuarterTurn1TileUp90
        (1 << 0), // TrackElemType::RightQuarterTurn1TileUp90
        (1 << 0), // TrackElemType::LeftQuarterTurn1TileDown90
        (1 << 0), // TrackElemType::RightQuarterTurn1TileDown90
        (1 << 0) | (1 << 2), // TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop
        (1 << 0) | (1 << 2), // TrackElemType::MultiDimFlatToDown90QuarterLoop
        (1 << 0) | (1 << 2), // TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop
        (1 << 0), // TrackElemType::RotationControlToggle
        (1 << 0), // TrackElemType::FlatTrack1x4A
        (1 << 0), // TrackElemType::FlatTrack2x2
        (1 << 0), // TrackElemType::FlatTrack4x4
        (1 << 0), // TrackElemType::FlatTrack2x4
        (1 << 0), // TrackElemType::FlatTrack1x5
        (1 << 0), // TrackElemType::FlatTrack1x1A
        (1 << 0), // TrackElemType::FlatTrack1x4B
        (1 << 0), // TrackElemType::FlatTrack1x1B
        (1 << 0), // TrackElemType::FlatTrack1x4C
        (1 << 0), // TrackElemType::FlatTrack3x3
        (1 << 0) | (1 << 5), // TrackElemType::LeftLargeCorkscrewUp
        (1 << 0) | (1 << 5), // TrackElemType::RightLargeCorkscrewUp
        (1 << 0) | (1 << 5), // TrackElemType::LeftLargeCorkscrewDown
        (1 << 0) | (1 << 5), // TrackElemType::RightLargeCorkscrewDown
        (1 << 0) | (1 << 4), // TrackElemType::LeftMediumHalfLoopUp
        (1 << 0) | (1 << 4), // TrackElemType::RightMediumHalfLoopUp
        (1 << 0) | (1 << 4), // TrackElemType::LeftMediumHalfLoopDown
        (1 << 0) | (1 << 4), // TrackElemType::RightMediumHalfLoopDown
        (1 << 0) | (1 << 2), // TrackElemType::LeftZeroGRollUp
        (1 << 0) | (1 << 2), // TrackElemType::RightZeroGRollUp
        (1 << 0) | (1 << 2), // TrackElemType::LeftZeroGRollDown
        (1 << 0) | (1 << 2), // TrackElemType::RightZeroGRollDown
        (1 << 0) | (1 << 3), // TrackElemType::LeftLargeZeroGRollUp
        (1 << 0) | (1 << 3), // TrackElemType::RightLargeZeroGRollUp
        (1 << 0) | (1 << 3), // TrackElemType::LeftLargeZeroGRollDown
        (1 << 0) | (1 << 3), // TrackElemType::RightLargeZeroGRollDown
        (1 << 0) | (1 << 6), // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp
        (1 << 0) | (1 << 6), // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp
        (1 << 0) | (1 << 6), // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown
        (1 << 0) | (1 << 6), // TrackElemType::RightFlyerLargeHalfLoopInvertedDown
        (1 << 0) | (1 << 6), // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp
        (1 << 0) | (1 << 6), // TrackElemType::RightFlyerLargeHalfLoopInvertedUp
        (1 << 0) | (1 << 6), // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown
        (1 << 0) | (1 << 6), // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown
        (1 << 0) | (1 << 3), // TrackElemType::FlyerHalfLoopInvertedUp
        (1 << 0) | (1 << 3), // TrackElemType::FlyerHalfLoopUninvertedDown
        (1 << 0) | (1 << 4), // TrackElemType::LeftEighthToDiagUp25         
        (1 << 0) | (1 << 4), // TrackElemType::RightEighthToDiagUp25        
        (1 << 0) | (1 << 4), // TrackElemType::LeftEighthToDiagDown25       
        (1 << 0) | (1 << 4), // TrackElemType::RightEighthToDiagDown25      
        (1 << 0) | (1 << 4), // TrackElemType::LeftEighthToOrthogonalUp25   
        (1 << 0) | (1 << 4), // TrackElemType::RightEighthToOrthogonalUp25  
        (1 << 0) | (1 << 4), // TrackElemType::LeftEighthToOrthogonalDown25 
        (1 << 0) | (1 << 4), // TrackElemType::RightEighthToOrthogonalDown25
        (1 << 0), // TrackElemType::DiagUp25ToRightBankedUp25
        (1 << 0), // TrackElemType::DiagUp25ToLeftBankedUp25
        (1 << 0), // TrackElemType::DiagRightBankedUp25ToUp25
        (1 << 0), // TrackElemType::DiagLeftBankedUp25ToUp25
        (1 << 0), // TrackElemType::DiagDown25ToRightBankedDown25
        (1 << 0), // TrackElemType::DiagDown25ToLeftBankedDown25
        (1 << 0), // TrackElemType::DiagRightBankedDown25ToDown25
        (1 << 0), // TrackElemType::DiagLeftBankedDown25ToDown25
        (1 << 0), // TrackElemType::DiagRightBankedFlatToRightBankedUp25
        (1 << 0), // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25
        (1 << 0), // TrackElemType::DiagRightBankedUp25ToRightBankedFlat
        (1 << 0), // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat
        (1 << 0), // TrackElemType::DiagRightBankedFlatToRightBankedDown25
        (1 << 0), // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25
        (1 << 0), // TrackElemType::DiagRightBankedDown25ToRightBankedFlat
        (1 << 0), // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat
        (1 << 0), // TrackElemType::DiagFlatToRightBankedUp25
        (1 << 0), // TrackElemType::DiagFlatToLeftBankedUp25
        (1 << 0), // TrackElemType::DiagRightBankedUp25ToFlat
        (1 << 0), // TrackElemType::DiagLeftBankedUp25ToFlat
        (1 << 0), // TrackElemType::DiagFlatToRightBankedDown25
        (1 << 0), // TrackElemType::DiagFlatToLeftBankedDown25
        (1 << 0), // TrackElemType::DiagRightBankedDown25ToFlat
        (1 << 0), // TrackElemType::DiagLeftBankedDown25ToFlat
        (1 << 0), // TrackElemType::DiagUp25RightBanked
        (1 << 0), // TrackElemType::DiagUp25LeftBanked 
        (1 << 0), // TrackElemType::DiagDown25RightBanked
        (1 << 0), // TrackElemType::DiagDown25LeftBanked
        (1 << 0) | (1 << 4), // TrackElemType::RightEighthBankToDiagUp25
        (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToDiagUp25
        (1 << 0) | (1 << 4), // TrackElemType::RightEighthBankToDiagDown25
        (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToDiagDown25
        (1 << 0) | (1 << 4), // TrackElemType::RightEighthBankToOrthogonalUp25
        (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToOrthogonalUp25 
        (1 << 0) | (1 << 4), // TrackElemType::RightEighthBankToOrthogonalDown25
        (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToOrthogonalDown25
        (1 << 0), // TrackElemType::DiagBrakes
        (1 << 0), // TrackElemType::DiagBlockBrakes
    };
    static_assert(std::size(TrackHeightMarkerPositions) == TrackElemType::Count);
    
    /** rct2: 0x00999A94 */
    static constexpr uint8_t TrackSequenceElementAllowedWallEdges[][kMaxSequencesPerPiece] = {
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Flat
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::EndStation
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::BeginStation
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::MiddleStation
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up60
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatToUp25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up25ToUp60
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up60ToUp25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up25ToFlat
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down60
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatToDown25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down25ToDown60
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down60ToDown25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down25ToFlat
        { 0b0010, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterTurn5Tiles
        { 0b1000, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterTurn5Tiles
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatToLeftBank
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatToRightBank
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankToFlat
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankToFlat
        { 0b0010, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::BankedLeftQuarterTurn5Tiles
        { 0b1000, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::BankedRightQuarterTurn5Tiles
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankToUp25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankToUp25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up25ToLeftBank
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up25ToRightBank
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankToDown25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankToDown25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down25ToLeftBank
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down25ToRightBank
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBank
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBank
        { 0b0010, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterTurn5TilesUp25
        { 0b1000, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterTurn5TilesUp25
        { 0b0010, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterTurn5TilesDown25
        { 0b1000, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterTurn5TilesDown25
        { 0b1010, 0b0011, 0b1100, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::SBendLeft
        { 0b1010, 0b1001, 0b0110, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::SBendRight
        { 0b0010, 0b0010, 0b0011,      0,      0,      0,      0, 0b1100, 0b1000, 0b1000,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftVerticalLoop
        { 0b1000, 0b1000, 0b1001,      0,      0,      0,      0, 0b0110, 0b0010, 0b0010,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightVerticalLoop
        { 0b0010, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterTurn3Tiles
        { 0b1000, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterTurn3Tiles
        { 0b0010, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankedQuarterTurn3Tiles
        { 0b1000, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankedQuarterTurn3Tiles
        { 0b0010, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterTurn3TilesUp25
        { 0b1000, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterTurn3TilesUp25
        { 0b0010, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterTurn3TilesDown25
        { 0b1000, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterTurn3TilesDown25
        { 0b0011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterTurn1Tile
        { 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterTurn1Tile
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftTwistDownToUp
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightTwistDownToUp
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftTwistUpToDown
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightTwistUpToDown
        { 0b1010, 0b1010, 0b1011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::HalfLoopUp
        {      0, 0b1011, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::HalfLoopDown
        { 0b1010, 0b0011, 0b0101,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftCorkscrewUp
        { 0b1010, 0b1001, 0b0101,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightCorkscrewUp
        { 0b1010, 0b0011, 0b0101,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftCorkscrewDown
        { 0b1010, 0b1001, 0b0101,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightCorkscrewDown
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatToUp60
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up60ToFlat
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatToDown60
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down60ToFlat
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::TowerBase
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::TowerSection
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatCovered
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up25Covered
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up60Covered
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatToUp25Covered
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up25ToUp60Covered
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up60ToUp25Covered
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up25ToFlatCovered
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down25Covered
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down60Covered
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatToDown25Covered
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down25ToDown60Covered
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down60ToDown25Covered
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down25ToFlatCovered
        { 0b0010, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterTurn5TilesCovered
        { 0b1000, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterTurn5TilesCovered
        { 0b1010, 0b0011, 0b1100, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::SBendLeftCovered
        { 0b1010, 0b1001, 0b0110, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::SBendRightCovered
        { 0b0010, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterTurn3TilesCovered
        { 0b1000, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterTurn3TilesCovered
        { 0b0010, 0b1100, 0b0011, 0b0001, 0b0001, 0b0110, 0b1001, 0b1000,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftHalfBankedHelixUpSmall
        { 0b1000, 0b0110, 0b1001, 0b0001, 0b0001, 0b1100, 0b0011, 0b0010,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightHalfBankedHelixUpSmall
        { 0b0010, 0b1100, 0b0011, 0b0001, 0b0001, 0b0110, 0b1001, 0b1000,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftHalfBankedHelixDownSmall
        { 0b1000, 0b0110, 0b1001, 0b0001, 0b0001, 0b1100, 0b0011, 0b0010,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightHalfBankedHelixDownSmall
        { 0b0010, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0001, 0b0001, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b1000,      0,      0 }, // TrackElemType::LeftHalfBankedHelixUpLarge
        { 0b1000, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b0001, 0b0001, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0010,      0,      0 }, // TrackElemType::RightHalfBankedHelixUpLarge
        { 0b0010, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0001, 0b0001, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b1000,      0,      0 }, // TrackElemType::LeftHalfBankedHelixDownLarge
        { 0b1000, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b0001, 0b0001, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0010,      0,      0 }, // TrackElemType::RightHalfBankedHelixDownLarge
        { 0b0011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterTurn1TileUp60
        { 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterTurn1TileUp60
        { 0b0011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterTurn1TileDown60
        { 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterTurn1TileDown60
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Brakes
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Booster
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::InvertedUp90ToFlatQuarterLoopAlias / Maze
        { 0b0010, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterBankedHelixLargeUp
        { 0b1000, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterBankedHelixLargeUp
        { 0b0010, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterBankedHelixLargeDown
        { 0b1000, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterBankedHelixLargeDown
        { 0b0010, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterHelixLargeUp
        { 0b1000, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterHelixLargeUp
        { 0b0010, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterHelixLargeDown
        { 0b1000, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterHelixLargeDown
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up25LeftBanked
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up25RightBanked
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Waterfall
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Rapids
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::OnRidePhoto
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down25LeftBanked
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down25RightBanked
        { 0b1010, 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Watersplash
        { 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatToUp60LongBase
        { 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up60ToFlatLongBase
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Whirlpool
        { 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down60ToFlatLongBase
        { 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatToDown60LongBase
        { 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::CableLiftHill
        { 0b1010, 0b1010, 0b1010, 0b1010, 0b1010, 0b1011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::ReverseFreefallSlope
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::ReverseFreefallVertical
        { 0b1111,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up90
        { 0b1111,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down90
        { 0b1011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up60ToUp90
        { 0b1110,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down90ToDown60
        { 0b1011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up90ToUp60
        { 0b1110,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down60ToDown90
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::BrakeForDrop
        { 0b0010, 0b0010, 0b1000, 0b0011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftEighthToDiag
        { 0b1000, 0b1000, 0b0010, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightEighthToDiag
        {      0, 0b1000, 0b0110, 0b0010, 0b0010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftEighthToOrthogonal
        {      0, 0b0100, 0b1001, 0b0001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightEighthToOrthogonal
        { 0b0010, 0b0010, 0b1000, 0b0011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftEighthBankToDiag
        { 0b1000, 0b1000, 0b0010, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightEighthBankToDiag
        {      0, 0b1000, 0b0110, 0b0010, 0b0010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftEighthBankToOrthogonal
        {      0, 0b0100, 0b1001, 0b0001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightEighthBankToOrthogonal
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagFlat
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagUp25
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagUp60
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagFlatToUp25
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagUp25ToUp60
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagUp60ToUp25
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagUp25ToFlat
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagDown25
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagDown60
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagFlatToDown25
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagDown25ToDown60
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagDown60ToDown25
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagDown25ToFlat
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagFlatToUp60
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagUp60ToFlat
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagFlatToDown60
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagDown60ToFlat
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagFlatToLeftBank
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagFlatToRightBank
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagLeftBankToFlat
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagRightBankToFlat
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagLeftBankToUp25
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagRightBankToUp25
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagUp25ToLeftBank
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagUp25ToRightBank
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagLeftBankToDown25
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagRightBankToDown25
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagDown25ToLeftBank
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagDown25ToRightBank
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagLeftBank
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagRightBank
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LogFlumeReverser
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::SpinningTunnel
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBarrelRollUpToDown
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBarrelRollUpToDown
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBarrelRollDownToUp
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBarrelRollDownToUp
        { 0b0010, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25
        { 0b1000, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankToRightQuarterTurn3TilesUp25
        { 0b0010, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank
        { 0b1000, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterTurn3TilesDown25ToRightBank
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::PoweredLift
        { 0b1010, 0b1010, 0b0010, 0b0011, 0b1001, 0b1000, 0b1000,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftLargeHalfLoopUp
        { 0b1010, 0b1010, 0b1000, 0b1001, 0b0011, 0b0010, 0b0010,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightLargeHalfLoopUp
        { 0b0010, 0b0010, 0b0011, 0b1001, 0b1000, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftLargeHalfLoopDown
        { 0b1000, 0b1000, 0b1001, 0b0011, 0b0010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightLargeHalfLoopDown
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftFlyerTwistUp
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightFlyerTwistUp
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftFlyerTwistDown
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightFlyerTwistDown
        { 0b1010, 0b1010, 0b1011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlyerHalfLoopUninvertedUp
        {      0, 0b1011, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlyerHalfLoopInvertedDown
        { 0b1010, 0b0011, 0b0101,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftFlyerCorkscrewUp
        { 0b1010, 0b1001, 0b0101,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightFlyerCorkscrewUp
        { 0b1010, 0b0011, 0b0101,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftFlyerCorkscrewDown
        { 0b1010, 0b1001, 0b0101,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightFlyerCorkscrewDown
        { 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::HeartLineTransferUp
        { 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::HeartLineTransferDown
        { 0b1010, 0b1010, 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftHeartLineRoll
        { 0b1010, 0b1010, 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightHeartLineRoll
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::MinigolfHoleA
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::MinigolfHoleB
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::MinigolfHoleC
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::MinigolfHoleD
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::MinigolfHoleE
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up90ToInvertedFlatQuarterLoop
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::InvertedFlatToDown90QuarterLoop
        { 0b0010, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftCurvedLiftHill
        { 0b1000, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightCurvedLiftHill
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftReverser
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightReverser
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::AirThrustTopCap
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::AirThrustVerticalDown
        { 0b1010, 0b1010, 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::AirThrustVerticalDownToLevel
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::BlockBrakes
        { 0b0010, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankedQuarterTurn3TileUp25
        { 0b1000, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankedQuarterTurn3TileUp25
        { 0b0010, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankedQuarterTurn3TileDown25
        { 0b1000, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankedQuarterTurn3TileDown25
        { 0b0010, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankedQuarterTurn5TileUp25
        { 0b1000, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankedQuarterTurn5TileUp25
        { 0b0010, 0b1100, 0b0011,      0, 0b1100, 0b0011, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankedQuarterTurn5TileDown25
        { 0b1000, 0b0110, 0b1001,      0, 0b0110, 0b1001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankedQuarterTurn5TileDown25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up25ToLeftBankedUp25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Up25ToRightBankedUp25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankedUp25ToUp25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankedUp25ToUp25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down25ToLeftBankedDown25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::Down25ToRightBankedDown25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankedDown25ToDown25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankedDown25ToDown25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankedFlatToLeftBankedUp25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankedFlatToRightBankedUp25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankedUp25ToLeftBankedFlat
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankedUp25ToRightBankedFlat
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankedFlatToLeftBankedDown25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankedFlatToRightBankedDown25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankedDown25ToLeftBankedFlat
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankedDown25ToRightBankedFlat
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatToLeftBankedUp25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatToRightBankedUp25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankedUp25ToFlat
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankedUp25ToFlat
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatToLeftBankedDown25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatToRightBankedDown25
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftBankedDown25ToFlat
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightBankedDown25ToFlat
        { 0b1111,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterTurn1TileUp90
        { 0b1111,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterTurn1TileUp90
        { 0b1111,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftQuarterTurn1TileDown90
        { 0b1111,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightQuarterTurn1TileDown90
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::MultiDimFlatToDown90QuarterLoop
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop
        { 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RotationControlToggle
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatTrack1x4A
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatTrack2x2
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatTrack4x4
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatTrack2x4
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatTrack1x5
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatTrack1x1A
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatTrack1x4B
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatTrack1x1B
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatTrack1x4C
        {      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlatTrack3x3
        { 0b1010, 0b0010, 0b0011, 0b1100, 0b0001, 0b0101,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftLargeCorkscrewUp
        { 0b1010, 0b1000, 0b1001, 0b0110, 0b0001, 0b0101,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightLargeCorkscrewUp
        { 0b1010, 0b0010, 0b1100, 0b0011, 0b0001, 0b0101,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftLargeCorkscrewDown
        { 0b1010, 0b1000, 0b0110, 0b1001, 0b0001, 0b0101,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightLargeCorkscrewDown
        { 0b1010, 0b0010, 0b0011, 0b1001, 0b1000,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftMediumHalfLoopUp
        { 0b1010, 0b1000, 0b1001, 0b0011, 0b0010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightMediumHalfLoopUp
        { 0b0010, 0b0011, 0b1001, 0b1000, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftMediumHalfLoopDown
        { 0b1000, 0b1001, 0b0011, 0b0010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightMediumHalfLoopDown
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftZeroGRollUp
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightZeroGRollUp
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftZeroGRollDown
        { 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightZeroGRollDown
        { 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftLargeZeroGRollUp
        { 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightLargeZeroGRollUp
        { 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftLargeZeroGRollDown
        { 0b1010, 0b1010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightLargeZeroGRollDown
    
        { 0b1010, 0b1010, 0b0010, 0b0011, 0b1001, 0b1000, 0b1000,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp
        { 0b1010, 0b1010, 0b1000, 0b1001, 0b0011, 0b0010, 0b0010,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp
        { 0b0010, 0b0010, 0b0011, 0b1001, 0b1000, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown
        { 0b1000, 0b1000, 0b1001, 0b0011, 0b0010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedDown
        { 0b1010, 0b1010, 0b0010, 0b0011, 0b1001, 0b1000, 0b1000,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp
        { 0b1010, 0b1010, 0b1000, 0b1001, 0b0011, 0b0010, 0b0010,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp
        { 0b0010, 0b0010, 0b0011, 0b1001, 0b1000, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown
        { 0b1000, 0b1000, 0b1001, 0b0011, 0b0010, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown
        { 0b1010, 0b1010, 0b1011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlyerHalfLoopInvertedUp
        {      0, 0b1011, 0b1010, 0b1010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::FlyerHalfLoopUninvertedDown
        { 0b0010, 0b0010, 0b1000, 0b0011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftEighthToDiagUp25         
        { 0b1000, 0b1000, 0b0010, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightEighthToDiagUp25        
        { 0b0010, 0b0010, 0b1000, 0b0011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftEighthToDiagDown25       
        { 0b1000, 0b1000, 0b0010, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightEighthToDiagDown25      
        {      0, 0b1000, 0b0110, 0b0010, 0b0010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftEighthToOrthogonalUp25   
        {      0, 0b0100, 0b1001, 0b0001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightEighthToOrthogonalUp25  
        {      0, 0b1000, 0b0110, 0b0010, 0b0010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftEighthToOrthogonalDown25 
        {      0, 0b0100, 0b1001, 0b0001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightEighthToOrthogonalDown25
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagUp25ToLeftBankedUp25              
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagUp25ToRightBankedUp25               
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagLeftBankedUp25ToUp25              
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagRightBankedUp25ToUp25               
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagDown25ToLeftBankedDown25          
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagDown25ToRightBankedDown25           
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagLeftBankedDown25ToDown25          
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagRightBankedDown25ToDown25           
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25   
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25     
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat   
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat     
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25   
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat 
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat   
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagFlatToLeftBankedUp25              
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagFlatToRightBankedUp25               
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagLeftBankedUp25ToFlat              
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagRightBankedUp25ToFlat               
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagFlatToLeftBankedDown25            
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagFlatToRightBankedDown25             
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagLeftBankedDown25ToFlat            
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagRightBankedDown25ToFlat             
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagUp25LeftBanked                    
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagUp25RightBanked                     
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagDown25LeftBanked                  
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagDown25RightBanked                   
        { 0b0010, 0b0010, 0b1000, 0b0011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftEighthBankToDiagUp25              
        { 0b1000, 0b1000, 0b0010, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightEighthBankToDiagUp25               
        { 0b0010, 0b0010, 0b1000, 0b0011,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftEighthBankToDiagDown25            
        { 0b1000, 0b1000, 0b0010, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightEighthBankToDiagDown25             
        {      0, 0b1000, 0b0110, 0b0010, 0b0010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftEighthBankToOrthogonalUp25        
        {      0, 0b0100, 0b1001, 0b0001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightEighthBankToOrthogonalUp25         
        {      0, 0b1000, 0b0110, 0b0010, 0b0010,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::LeftEighthBankToOrthogonalDown25      
        {      0, 0b0100, 0b1001, 0b0001, 0b0001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::RightEighthBankToOrthogonalDown25
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagBrakes
        {      0, 0b0110, 0b1001,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0 }, // TrackElemType::DiagBlockBrakes
    };
    
    
    
    static_assert(std::size(TrackSequenceElementAllowedWallEdges) == TrackElemType::Count);
    
    /** rct2: 0x0099423C */
    static constexpr uint32_t TrackFlags[] = {
        /* TrackElemType::Flat                                          */   TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::EndStation                                    */   0,
        /* TrackElemType::BeginStation                                  */   0,
        /* TrackElemType::MiddleStation                                 */   0,
        /* TrackElemType::Up25                                          */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::Up60                                          */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::FlatToUp25                                    */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::Up25ToUp60                                    */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::Up60ToUp25                                    */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::Up25ToFlat                                    */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::Down25                                        */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::Down60                                        */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::FlatToDown25                                  */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::Down25ToDown60                                */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::Down60ToDown25                                */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::Down25ToFlat                                  */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::LeftQuarterTurn5Tiles                         */   TRACK_ELEM_FLAG_TURN_LEFT,
        /* TrackElemType::RightQuarterTurn5Tiles                        */   TRACK_ELEM_FLAG_TURN_RIGHT,
        /* TrackElemType::FlatToLeftBank                                */   TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::FlatToRightBank                               */   TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBankToFlat                                */   TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankToFlat                               */   TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::BankedLeftQuarterTurn5Tiles                   */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::BankedRightQuarterTurn5Tiles                  */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBankToUp25                                */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankToUp25                               */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::Up25ToLeftBank                                */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::Up25ToRightBank                               */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBankToDown25                              */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankToDown25                             */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::Down25ToLeftBank                              */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::Down25ToRightBank                             */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBank                                      */   TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBank                                     */   TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftQuarterTurn5TilesUp25                     */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::RightQuarterTurn5TilesUp25                    */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::LeftQuarterTurn5TilesDown25                   */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::RightQuarterTurn5TilesDown25                  */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::SBendLeft                                     */   0,
        /* TrackElemType::SBendRight                                    */   0,
        /* TrackElemType::LeftVerticalLoop                              */   TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightVerticalLoop                             */   TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftQuarterTurn3Tiles                         */   TRACK_ELEM_FLAG_TURN_LEFT,
        /* TrackElemType::RightQuarterTurn3Tiles                        */   TRACK_ELEM_FLAG_TURN_RIGHT,
        /* TrackElemType::LeftBankedQuarterTurn3Tiles                   */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankedQuarterTurn3Tiles                  */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftQuarterTurn3TilesUp25                     */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::RightQuarterTurn3TilesUp25                    */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::LeftQuarterTurn3TilesDown25                   */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::RightQuarterTurn3TilesDown25                  */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::LeftQuarterTurn1Tile                          */   TRACK_ELEM_FLAG_TURN_LEFT,
        /* TrackElemType::RightQuarterTurn1Tile                         */   TRACK_ELEM_FLAG_TURN_RIGHT,
        /* TrackElemType::LeftTwistDownToUp                             */   TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightTwistDownToUp                            */   TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftTwistUpToDown                             */   TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightTwistUpToDown                            */   TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::HalfLoopUp                                    */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::HalfLoopDown                                  */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftCorkscrewUp                               */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightCorkscrewUp                              */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftCorkscrewDown                             */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightCorkscrewDown                            */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::FlatToUp60                                    */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::Up60ToFlat                                    */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::FlatToDown60                                  */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::Down60ToFlat                                  */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::TowerBase                                     */   0,
        /* TrackElemType::TowerSection                                  */   0,
        /* TrackElemType::FlatCovered                                   */   0,
        /* TrackElemType::Up25Covered                                   */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::Up60Covered                                   */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::FlatToUp25Covered                             */   TRACK_ELEM_FLAG_UP,
        /* TrackElemType::Up25ToUp60Covered                             */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::Up60ToUp25Covered                             */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::Up25ToFlatCovered                             */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::Down25Covered                                 */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::Down60Covered                                 */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::FlatToDown25Covered                           */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::Down25ToDown60Covered                         */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::Down60ToDown25Covered                         */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::Down25ToFlatCovered                           */   TRACK_ELEM_FLAG_DOWN,
        /* TrackElemType::LeftQuarterTurn5TilesCovered                  */   TRACK_ELEM_FLAG_TURN_LEFT,
        /* TrackElemType::RightQuarterTurn5TilesCovered                 */   TRACK_ELEM_FLAG_TURN_RIGHT,
        /* TrackElemType::SBendLeftCovered                              */   0,
        /* TrackElemType::SBendRightCovered                             */   0,
        /* TrackElemType::LeftQuarterTurn3TilesCovered                  */   TRACK_ELEM_FLAG_TURN_LEFT,
        /* TrackElemType::RightQuarterTurn3TilesCovered                 */   TRACK_ELEM_FLAG_TURN_RIGHT,
        /* TrackElemType::LeftHalfBankedHelixUpSmall                    */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightHalfBankedHelixUpSmall                   */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftHalfBankedHelixDownSmall                  */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightHalfBankedHelixDownSmall                 */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftHalfBankedHelixUpLarge                    */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightHalfBankedHelixUpLarge                   */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftHalfBankedHelixDownLarge                  */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightHalfBankedHelixDownLarge                 */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftQuarterTurn1TileUp60                      */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::RightQuarterTurn1TileUp60                     */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::LeftQuarterTurn1TileDown60                    */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::RightQuarterTurn1TileDown60                   */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::Brakes                                        */   0,
        /* TrackElemType::Booster                                       */   0,
        /* TrackElemType::InvertedUp90ToFlatQuarterLoopAlias / Maze     */   TRACK_ELEM_FLAG_ONLY_ABOVE_GROUND,
        /* TrackElemType::LeftQuarterBankedHelixLargeUp                 */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightQuarterBankedHelixLargeUp                */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftQuarterBankedHelixLargeDown               */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightQuarterBankedHelixLargeDown              */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftQuarterHelixLargeUp                       */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX,
        /* TrackElemType::RightQuarterHelixLargeUp                      */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX,
        /* TrackElemType::LeftQuarterHelixLargeDown                     */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX,
        /* TrackElemType::RightQuarterHelixLargeDown                    */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX,
        /* TrackElemType::Up25LeftBanked                                */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::Up25RightBanked                               */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::Waterfall                                     */   0,
        /* TrackElemType::Rapids                                        */   0,
        /* TrackElemType::OnRidePhoto                                   */   0,
        /* TrackElemType::Down25LeftBanked                              */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::Down25RightBanked                             */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::Watersplash                                   */   0,
        /* TrackElemType::FlatToUp60LongBase                            */   TRACK_ELEM_FLAG_UP,
        /* TrackElemType::Up60ToFlatLongBase                            */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::Whirlpool                                     */   0,
        /* TrackElemType::Down60ToFlatLongBase                          */   TRACK_ELEM_FLAG_DOWN,
        /* TrackElemType::FlatToDown60LongBase                          */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::CableLiftHill                                 */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::ReverseFreefallSlope                          */ TRACK_ELEM_FLAG_UP,
        /* TrackElemType::ReverseFreefallVertical                       */ TRACK_ELEM_FLAG_UP,
        /* TrackElemType::Up90                                          */   TRACK_ELEM_FLAG_UP,
        /* TrackElemType::Down90                                        */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::Up60ToUp90                                    */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::Down90ToDown60                                */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::Up90ToUp60                                    */   TRACK_ELEM_FLAG_UP,
        /* TrackElemType::Down60ToDown90                                */   TRACK_ELEM_FLAG_DOWN,
        /* TrackElemType::BrakeForDrop                                  */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::LeftEighthToDiag                              */   TRACK_ELEM_FLAG_TURN_LEFT,
        /* TrackElemType::RightEighthToDiag                             */   TRACK_ELEM_FLAG_TURN_RIGHT,
        /* TrackElemType::LeftEighthToOrthogonal                        */   TRACK_ELEM_FLAG_TURN_LEFT,
        /* TrackElemType::RightEighthToOrthogonal                       */   TRACK_ELEM_FLAG_TURN_RIGHT,
        /* TrackElemType::LeftEighthBankToDiag                          */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightEighthBankToDiag                         */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftEighthBankToOrthogonal                    */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightEighthBankToOrthogonal                   */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::DiagFlat                                      */   TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagUp25                                      */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagUp60                                      */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagFlatToUp25                                */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagUp25ToUp60                                */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagUp60ToUp25                                */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagUp25ToFlat                                */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagDown25                                    */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagDown60                                    */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagFlatToDown25                              */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagDown25ToDown60                            */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagDown60ToDown25                            */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagDown25ToFlat                              */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagFlatToUp60                                */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagUp60ToFlat                                */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagFlatToDown60                              */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagDown60ToFlat                              */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL,
        /* TrackElemType::DiagFlatToLeftBank                            */   TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::DiagFlatToRightBank                           */   TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::DiagLeftBankToFlat                            */   TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::DiagRightBankToFlat                           */   TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::DiagLeftBankToUp25                            */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::DiagRightBankToUp25                           */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::DiagUp25ToLeftBank                            */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::DiagUp25ToRightBank                           */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::DiagLeftBankToDown25                          */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::DiagRightBankToDown25                         */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::DiagDown25ToLeftBank                          */   TRACK_ELEM_FLAG_DOWN,
        /* TrackElemType::DiagDown25ToRightBank                         */   TRACK_ELEM_FLAG_DOWN,
        /* TrackElemType::DiagLeftBank                                  */   TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::DiagRightBank                                 */   TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LogFlumeReverser                              */   TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::SpinningTunnel                                */   TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBarrelRollUpToDown                        */   TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightBarrelRollUpToDown                       */   TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftBarrelRollDownToUp                        */   TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightBarrelRollDownToUp                       */   TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25           */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankToRightQuarterTurn3TilesUp25         */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank         */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightQuarterTurn3TilesDown25ToRightBank       */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::PoweredLift                                   */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::LeftLargeHalfLoopUp                           */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightLargeHalfLoopUp                          */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftLargeHalfLoopDown                         */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightLargeHalfLoopDown                        */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftFlyerTwistUp                              */   TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightFlyerTwistUp                             */   TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftFlyerTwistDown                            */   TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightFlyerTwistDown                           */   TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::FlyerHalfLoopUninvertedUp                     */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::FlyerHalfLoopInvertedDown                     */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftFlyerCorkscrewUp                          */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightFlyerCorkscrewUp                         */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftFlyerCorkscrewDown                        */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightFlyerCorkscrewDown                       */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::HeartLineTransferUp                           */   0,
        /* TrackElemType::HeartLineTransferDown                         */   0,
        /* TrackElemType::LeftHeartLineRoll                             */   TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL | TRACK_ELEM_FLAG_CAN_BE_PARTLY_UNDERGROUND,
        /* TrackElemType::RightHeartLineRoll                            */   TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL | TRACK_ELEM_FLAG_CAN_BE_PARTLY_UNDERGROUND,
        /* TrackElemType::MinigolfHoleA                                 */   TRACK_ELEM_FLAG_IS_GOLF_HOLE,
        /* TrackElemType::MinigolfHoleB                                 */   TRACK_ELEM_FLAG_IS_GOLF_HOLE,
        /* TrackElemType::MinigolfHoleC                                 */   TRACK_ELEM_FLAG_IS_GOLF_HOLE,
        /* TrackElemType::MinigolfHoleD                                 */   TRACK_ELEM_FLAG_IS_GOLF_HOLE,
        /* TrackElemType::MinigolfHoleE                                 */   TRACK_ELEM_FLAG_IS_GOLF_HOLE,
        /* TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop       */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::Up90ToInvertedFlatQuarterLoop                 */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::InvertedFlatToDown90QuarterLoop               */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftCurvedLiftHill                            */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_UP,
        /* TrackElemType::RightCurvedLiftHill                           */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_UP,
        /* TrackElemType::LeftReverser                                  */   0,
        /* TrackElemType::RightReverser                                 */   0,
        /* TrackElemType::AirThrustTopCap                               */   0,
        /* TrackElemType::AirThrustVerticalDown                         */   TRACK_ELEM_FLAG_DOWN,
        /* TrackElemType::AirThrustVerticalDownToLevel                  */   TRACK_ELEM_FLAG_DOWN,
        /* TrackElemType::BlockBrakes                                   */   0,
        /* TrackElemType::LeftBankedQuarterTurn3TileUp25                */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankedQuarterTurn3TileUp25               */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBankedQuarterTurn3TileDown25              */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankedQuarterTurn3TileDown25             */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBankedQuarterTurn5TileUp25                */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankedQuarterTurn5TileUp25               */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBankedQuarterTurn5TileDown25              */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankedQuarterTurn5TileDown25             */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::Up25ToLeftBankedUp25                          */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::Up25ToRightBankedUp25                         */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBankedUp25ToUp25                          */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankedUp25ToUp25                         */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::Down25ToLeftBankedDown25                      */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::Down25ToRightBankedDown25                     */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBankedDown25ToDown25                      */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankedDown25ToDown25                     */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBankedFlatToLeftBankedUp25                */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankedFlatToRightBankedUp25              */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBankedUp25ToLeftBankedFlat                */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankedUp25ToRightBankedFlat              */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBankedFlatToLeftBankedDown25              */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankedFlatToRightBankedDown25            */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBankedDown25ToLeftBankedFlat              */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankedDown25ToRightBankedFlat            */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::FlatToLeftBankedUp25                          */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::FlatToRightBankedUp25                         */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBankedUp25ToFlat                          */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankedUp25ToFlat                         */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::FlatToLeftBankedDown25                        */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::FlatToRightBankedDown25                       */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftBankedDown25ToFlat                        */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::RightBankedDown25ToFlat                       */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED,
        /* TrackElemType::LeftQuarterTurn1TileUp90                      */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP,
        /* TrackElemType::RightQuarterTurn1TileUp90                     */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP,
        /* TrackElemType::LeftQuarterTurn1TileDown90                    */   TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN,
        /* TrackElemType::RightQuarterTurn1TileDown90                   */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN,
        /* TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop         */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::MultiDimFlatToDown90QuarterLoop               */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop         */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RotationControlToggle                         */   0,
        /* TrackElemType::FlatTrack1x4A                                 */   0,
        /* TrackElemType::FlatTrack2x2                                  */   0,
        /* TrackElemType::FlatTrack4x4                                  */   0,
        /* TrackElemType::FlatTrack2x4                                  */   TRACK_ELEM_FLAG_ONLY_ABOVE_GROUND,
        /* TrackElemType::FlatTrack1x5                                  */   0,
        /* TrackElemType::FlatTrack1x1A                                 */   0,
        /* TrackElemType::FlatTrack1x4B                                 */   0,
        /* TrackElemType::FlatTrack1x1B                                 */   0,
        /* TrackElemType::FlatTrack1x4C                                 */   0,
        /* TrackElemType::FlatTrack3x3                                  */   0,
        /* TrackElemType::LeftLargeCorkscrewUp                          */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightLargeCorkscrewUp                         */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftLargeCorkscrewDown                        */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightLargeCorkscrewDown                       */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftMediumHalfLoopUp                          */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightMediumHalfLoopUp                         */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftMediumHalfLoopDown                        */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightMediumHalfLoopDown                       */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftZeroGRollUp                               */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightZeroGRollUp                              */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftZeroGRollDown                             */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightZeroGRollDown                            */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftLargeZeroGRollUp                          */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightLargeZeroGRollUp                         */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftLargeZeroGRollDown                        */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightLargeZeroGRollDown                       */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp            */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::RightFlyerLargeHalfLoopUninvertedUp           */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::LeftFlyerLargeHalfLoopInvertedDown            */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::RightFlyerLargeHalfLoopInvertedDown           */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL,
        /* TrackElemType::LeftFlyerLargeHalfLoopInvertedUp              */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::RightFlyerLargeHalfLoopInvertedUp             */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown          */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION,
        /* TrackElemType::RightFlyerLargeHalfLoopUninvertedDown         */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION,
        /* TrackElemType::FlyerHalfLoopInvertedUp                       */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,
        /* TrackElemType::FlyerHalfLoopUnivertedDown                    */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION,
        /* TrackElemType::LeftEighthToDiagUp25                          */   TRACK_ELEM_FLAG_TURN_LEFT  | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP   | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::RightEighthToDiagUp25                         */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP   | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::LeftEighthToDiagDown25                        */   TRACK_ELEM_FLAG_TURN_LEFT  | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::RightEighthToDiagDown25                       */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::LeftEighthToOrthogonalUp25                    */   TRACK_ELEM_FLAG_TURN_LEFT  | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP   | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::RightEighthToOrthogonalUp25                   */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP   | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::LeftEighthToOrthogonalDown25                  */   TRACK_ELEM_FLAG_TURN_LEFT  | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::RightEighthToOrthogonalDown25                 */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,
        /* TrackElemType::DiagUp25ToLeftBankedUp25               */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,   
        /* TrackElemType::DiagUp25ToRightBankedUp25              */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,   
        /* TrackElemType::DiagLeftBankedUp25ToUp25               */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,   
        /* TrackElemType::DiagRightBankedUp25ToUp25              */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,   
        /* TrackElemType::DiagDown25ToLeftBankedDown25           */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,    
        /* TrackElemType::DiagDown25ToRightBankedDown25          */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,       
        /* TrackElemType::DiagLeftBankedDown25ToDown25           */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,       
        /* TrackElemType::DiagRightBankedDown25ToDown25          */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,       
        /* TrackElemType::DiagLeftBankedFlatToLeftBankedUp25     */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED,   
        /* TrackElemType::DiagRightBankedFlatToRightBankedUp25   */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED,   
        /* TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat     */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,   
        /* TrackElemType::DiagRightBankedUp25ToRightBankedFlat   */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,   
        /* TrackElemType::DiagLeftBankedFlatToLeftBankedDown25   */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,       
        /* TrackElemType::DiagRightBankedFlatToRightBankedDown25 */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,       
        /* TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat   */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED,       
        /* TrackElemType::DiagRightBankedDown25ToRightBankedFlat */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED,       
        /* TrackElemType::DiagFlatToLeftBankedUp25               */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED,   
        /* TrackElemType::DiagFlatToRightBankedUp25              */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED,   
        /* TrackElemType::DiagLeftBankedUp25ToFlat               */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,   
        /* TrackElemType::DiagRightBankedUp25ToFlat              */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,   
        /* TrackElemType::DiagFlatToLeftBankedDown25             */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,       
        /* TrackElemType::DiagFlatToRightBankedDown25            */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,       
        /* TrackElemType::DiagLeftBankedDown25ToFlat             */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED,       
        /* TrackElemType::DiagRightBankedDown25ToFlat            */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED,       
        /* TrackElemType::Up25LeftBanked                         */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,   
        /* TrackElemType::Up25RightBanked                        */   TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,   
        /* TrackElemType::Down25LeftBanked                       */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,       
        /* TrackElemType::Down25RightBanked                      */   TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT,       
        /* TrackElemType::LeftEighthBankToDiagUp25               */   TRACK_ELEM_FLAG_TURN_LEFT  | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP   | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,  
        /* TrackElemType::RightEighthBankToDiagUp25              */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP   | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,  
        /* TrackElemType::LeftEighthBankToDiagDown25             */   TRACK_ELEM_FLAG_TURN_LEFT  | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,  
        /* TrackElemType::RightEighthBankToDiagDown25            */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,  
        /* TrackElemType::LeftEighthBankToOrthogonalUp25         */   TRACK_ELEM_FLAG_TURN_LEFT  | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP   | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,  
        /* TrackElemType::RightEighthBankToOrthogonalUp25        */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP   | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,  
        /* TrackElemType::LeftEighthBankToOrthogonalDown25       */   TRACK_ELEM_FLAG_TURN_LEFT  | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,  
        /* TrackElemType::RightEighthBankToOrthogonalDown25      */   TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT,  
        /* TrackElemType::DiagBrakes                                    */   0,
        /* TrackElemType::DiagBlockBrakes                               */   0,
    };
    static_assert(std::size(TrackFlags) == TrackElemType::Count);
    // clang-format on

    /**  rct2: 0x00997C9D */
    // clang-format off
    static constexpr TrackDefinition TrackDefinitions[] =
    {
        // TYPE                         VANGLE END                  VANGLE START                BANK END                BANK START              PREVIEW Z OFFSET
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_FLAT
        { TrackGroup::stationEnd,            TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_END_STATION
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_BEGIN_STATION
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_MIDDLE_STATION
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up60,          TrackPitch::Up60,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_60_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_FLAT_TO_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up60,          TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_25_DEG_UP_TO_60_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up60,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_60_DEG_UP_TO_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_25_DEG_UP_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down60,        TrackPitch::Down60,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_60_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_FLAT_TO_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down60,        TrackPitch::Down25,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down60,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down25,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_25_DEG_DOWN_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_TURN_5_TILES
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_TURN_5_TILES
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Left,        TrackRoll::None,        0                  },  // ELEM_FLAT_TO_LEFT_BANK
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Right,       TrackRoll::None,        0                  },  // ELEM_FLAT_TO_RIGHT_BANK
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANK_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANK_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::None,           TrackRoll::None,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANK_TO_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::None,           TrackRoll::None,        TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANK_TO_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Up25,          TrackRoll::Left,        TrackRoll::None,        0                  },  // ELEM_25_DEG_UP_TO_LEFT_BANK
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Up25,          TrackRoll::Right,       TrackRoll::None,        0                  },  // ELEM_25_DEG_UP_TO_RIGHT_BANK
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::None,           TrackRoll::None,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANK_TO_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::None,           TrackRoll::None,        TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANK_TO_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down25,        TrackRoll::Left,        TrackRoll::None,        0                  },  // ELEM_25_DEG_DOWN_TO_LEFT_BANK
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down25,        TrackRoll::Right,       TrackRoll::None,        0                  },  // ELEM_25_DEG_DOWN_TO_RIGHT_BANK
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANK
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANK
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN
        { TrackGroup::sBend,                 TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_S_BEND_LEFT
        { TrackGroup::sBend,                 TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_S_BEND_RIGHT
        { TrackGroup::verticalLoop,          TrackPitch::Down25,        TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        -48                },  // ELEM_LEFT_VERTICAL_LOOP
        { TrackGroup::verticalLoop,          TrackPitch::Down25,        TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        -48                },  // ELEM_RIGHT_VERTICAL_LOOP
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_TURN_3_TILES
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_TURN_3_TILES
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_QUARTER_TURN_3_TILES_BANK
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_TURN_1_TILE
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_TURN_1_TILE
        { TrackGroup::twist,                  TrackPitch::None,           TrackPitch::None,           TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_LEFT_TWIST_DOWN_TO_UP
        { TrackGroup::twist,                  TrackPitch::None,           TrackPitch::None,           TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_RIGHT_TWIST_DOWN_TO_UP
        { TrackGroup::twist,                  TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, 0                  },  // ELEM_LEFT_TWIST_UP_TO_DOWN
        { TrackGroup::twist,                  TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, 0                  },  // ELEM_RIGHT_TWIST_UP_TO_DOWN
        { TrackGroup::halfLoop,              TrackPitch::None,           TrackPitch::Up25,          TrackRoll::UpsideDown, TrackRoll::None,        64                 },  // ELEM_HALF_LOOP_UP
        { TrackGroup::halfLoop,              TrackPitch::Down25,        TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, -64                },  // ELEM_HALF_LOOP_DOWN
        { TrackGroup::corkscrew,              TrackPitch::None,           TrackPitch::None,           TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_LEFT_CORKSCREW_UP
        { TrackGroup::corkscrew,              TrackPitch::None,           TrackPitch::None,           TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_RIGHT_CORKSCREW_UP
        { TrackGroup::corkscrew,              TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, -32                },  // ELEM_LEFT_CORKSCREW_DOWN
        { TrackGroup::corkscrew,              TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, -32                },  // ELEM_RIGHT_CORKSCREW_DOWN
        { TrackGroup::flat,                   TrackPitch::Up60,          TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_FLAT_TO_60_DEG_UP
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Up60,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_60_DEG_UP_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::Down60,        TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_FLAT_TO_60_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down60,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_60_DEG_DOWN_TO_FLAT
        { TrackGroup::tower,             TrackPitch::Tower,         TrackPitch::Tower,         TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_TOWER_BASE
        { TrackGroup::tower,             TrackPitch::Tower,         TrackPitch::Tower,         TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_TOWER_SECTION
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_FLAT_COVERED
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_25_DEG_UP_COVERED
        { TrackGroup::flat,                   TrackPitch::Up60,          TrackPitch::Up60,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_60_DEG_UP_COVERED
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_FLAT_TO_25_DEG_UP_COVERED
        { TrackGroup::flat,                   TrackPitch::Up60,          TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up60,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_25_DEG_UP_TO_FLAT_COVERED
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_25_DEG_DOWN_COVERED
        { TrackGroup::flat,                   TrackPitch::Down60,        TrackPitch::Down60,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_60_DEG_DOWN_COVERED
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_FLAT_TO_25_DEG_DOWN_COVERED
        { TrackGroup::flat,                   TrackPitch::Down60,        TrackPitch::Down25,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down60,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down25,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_25_DEG_DOWN_TO_FLAT_COVERED
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_S_BEND_LEFT_COVERED
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_S_BEND_RIGHT_COVERED
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED
        { TrackGroup::helixUpBankedHalf,   TrackPitch::None,           TrackPitch::None,           TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL
        { TrackGroup::helixUpBankedHalf,   TrackPitch::None,           TrackPitch::None,           TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL
        { TrackGroup::helixDownBankedHalf, TrackPitch::None,           TrackPitch::None,           TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL
        { TrackGroup::helixDownBankedHalf, TrackPitch::None,           TrackPitch::None,           TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL
        { TrackGroup::helixUpBankedHalf,   TrackPitch::None,           TrackPitch::None,           TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE
        { TrackGroup::helixUpBankedHalf,   TrackPitch::None,           TrackPitch::None,           TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE
        { TrackGroup::helixDownBankedHalf, TrackPitch::None,           TrackPitch::None,           TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE
        { TrackGroup::helixDownBankedHalf, TrackPitch::None,           TrackPitch::None,           TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE
        { TrackGroup::flat,                   TrackPitch::Up60,          TrackPitch::Up60,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up60,          TrackPitch::Up60,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Down60,        TrackPitch::Down60,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down60,        TrackPitch::Down60,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN
        { TrackGroup::brakes,                 TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_BRAKES
        { TrackGroup::booster,                TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_BOOSTER
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // TrackElemType::Maze
        { TrackGroup::helixUpBankedQuarter,     TrackPitch::None,      TrackPitch::None,           TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP
        { TrackGroup::helixUpBankedQuarter,     TrackPitch::None,      TrackPitch::None,           TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP
        { TrackGroup::helixDownBankedQuarter,   TrackPitch::None,      TrackPitch::None,           TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN
        { TrackGroup::helixDownBankedQuarter,   TrackPitch::None,      TrackPitch::None,           TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN
        { TrackGroup::helixUpUnbankedQuarter,   TrackPitch::None,      TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_HELIX_LARGE_UP
        { TrackGroup::helixUpUnbankedQuarter,   TrackPitch::None,      TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_HELIX_LARGE_UP
        { TrackGroup::helixDownUnbankedQuarter, TrackPitch::None,      TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN
        { TrackGroup::helixDownUnbankedQuarter, TrackPitch::None,      TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_25_DEG_UP_LEFT_BANKED
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_25_DEG_UP_RIGHT_BANKED
        { TrackGroup::waterfall,              TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_WATERFALL
        { TrackGroup::rapids,                 TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RAPIDS
        { TrackGroup::onridePhoto,          TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_ON_RIDE_PHOTO
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_25_DEG_DOWN_LEFT_BANKED
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_25_DEG_DOWN_RIGHT_BANKED
        { TrackGroup::waterSplash,           TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_WATER_SPLASH
        { TrackGroup::flat,                   TrackPitch::Up60,          TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_FLAT_TO_60_DEG_UP_LONG_BASE
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Up60,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_60_DEG_UP_TO_FLAT_LONG_BASE
        { TrackGroup::whirlpool,              TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_WHIRLPOOL
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down60,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_FLAT_TO_60_DEG_DOWN_LONG_BASE
        { TrackGroup::flat,                   TrackPitch::Down60,        TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_60_DEG_UP_TO_FLAT_LONG_BASE_122
        { TrackGroup::liftHillCable,        TrackPitch::Down60,        TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_CABLE_LIFT_HILL
        { TrackGroup::reverseFreefall,       TrackPitch::ReverseFreefall,  TrackPitch::None,       TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_REVERSE_FREEFALL_SLOPE
        { TrackGroup::reverseFreefall,       TrackPitch::ReverseFreefall,  TrackPitch::ReverseFreefall,  TrackRoll::None,TrackRoll::None,        0                  },  // ELEM_REVERSE_FREEFALL_VERTICAL
        { TrackGroup::flat,                   TrackPitch::Up90,          TrackPitch::Up90,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_90_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Down90,        TrackPitch::Down90,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_90_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Up90,          TrackPitch::Up60,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_60_DEG_UP_TO_90_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Down60,        TrackPitch::Down90,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_90_DEG_DOWN_TO_60_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Up60,          TrackPitch::Up90,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_90_DEG_UP_TO_60_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Down90,        TrackPitch::Down60,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_60_DEG_DOWN_TO_90_DEG_DOWN
        { TrackGroup::brakeForDrop,         TrackPitch::Down60,        TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_BRAKE_FOR_DROP
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_EIGHTH_TO_DIAG
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_EIGHTH_TO_DIAG
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_EIGHTH_TO_ORTHOGONAL
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_EIGHTH_BANK_TO_DIAG
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_EIGHTH_BANK_TO_DIAG
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_FLAT
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up60,          TrackPitch::Up60,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_60_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_FLAT_TO_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up60,          TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_25_DEG_UP_TO_60_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up60,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_60_DEG_UP_TO_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_25_DEG_UP_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down60,        TrackPitch::Down60,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_60_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_FLAT_TO_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down60,        TrackPitch::Down25,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_25_DEG_DOWN_TO_60_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down60,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_60_DEG_DOWN_TO_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down25,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_25_DEG_DOWN_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::Up60,          TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_FLAT_TO_60_DEG_UP
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Up60,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_60_DEG_UP_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::Down60,        TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_FLAT_TO_60_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down60,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_DIAG_60_DEG_DOWN_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Left,        TrackRoll::None,        0                  },  // ELEM_DIAG_FLAT_TO_LEFT_BANK
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Right,       TrackRoll::None,        0                  },  // ELEM_DIAG_FLAT_TO_RIGHT_BANK
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::Left,        0                  },  // ELEM_DIAG_LEFT_BANK_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::Right,       0                  },  // ELEM_DIAG_RIGHT_BANK_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::None,           TrackRoll::None,        TrackRoll::Left,        0                  },  // ELEM_DIAG_LEFT_BANK_TO_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::None,           TrackRoll::None,        TrackRoll::Right,       0                  },  // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Up25,          TrackRoll::Left,        TrackRoll::None,        0                  },  // ELEM_DIAG_25_DEG_UP_TO_LEFT_BANK
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Up25,          TrackRoll::Right,       TrackRoll::None,        0                  },  // ELEM_DIAG_25_DEG_UP_TO_RIGHT_BANK
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::None,           TrackRoll::None,        TrackRoll::Left,        0                  },  // ELEM_DIAG_LEFT_BANK_TO_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::None,           TrackRoll::None,        TrackRoll::Right,       0                  },  // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down25,        TrackRoll::Left,        TrackRoll::None,        0                  },  // ELEM_DIAG_25_DEG_DOWN_TO_LEFT_BANK
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down25,        TrackRoll::Right,       TrackRoll::None,        0                  },  // ELEM_DIAG_25_DEG_DOWN_TO_RIGHT_BANK
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_DIAG_LEFT_BANK
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::None,           TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_DIAG_RIGHT_BANK
        { TrackGroup::logFlumeReverser,     TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LOG_FLUME_REVERSER
        { TrackGroup::spinningTunnel,        TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_SPINNING_TUNNEL
        { TrackGroup::barrelRoll,            TrackPitch::None,           TrackPitch::None,           TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_LEFT_BARREL_ROLL_UP_TO_DOWN
        { TrackGroup::barrelRoll,            TrackPitch::None,           TrackPitch::None,           TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_RIGHT_BARREL_ROLL_UP_TO_DOWN
        { TrackGroup::barrelRoll,            TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, 0                  },  // ELEM_LEFT_BARREL_ROLL_DOWN_TO_UP
        { TrackGroup::barrelRoll,            TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, 0                  },  // ELEM_RIGHT_BARREL_ROLL_DOWN_TO_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::None,           TrackRoll::None,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::None,           TrackRoll::None,        TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down25,        TrackRoll::Left,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down25,        TrackRoll::Right,       TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_RIGHT_BANK
        { TrackGroup::poweredLift,           TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_POWERED_LIFT
        {TrackGroup::halfLoopLarge,         TrackPitch::None,    TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None,        64                 },  // ELEM_LEFT_LARGE_HALF_LOOP_UP
        {TrackGroup::halfLoopLarge,         TrackPitch::None,    TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None,        64                 },  // ELEM_RIGHT_LARGE_HALF_LOOP_UP
        {TrackGroup::halfLoopLarge,         TrackPitch::Down25, TrackPitch::None,  TrackRoll::None,        TrackRoll::UpsideDown, -64                },  // ELEM_RIGHT_LARGE_HALF_LOOP_DOWN
        {TrackGroup::halfLoopLarge,         TrackPitch::Down25, TrackPitch::None,  TrackRoll::None,        TrackRoll::UpsideDown, -64                },  // ELEM_LEFT_LARGE_HALF_LOOP_DOWN
        {TrackGroup::inlineTwistUninverted, TrackPitch::None,    TrackPitch::None,  TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_LEFT_FLYER_TWIST_UP
        {TrackGroup::inlineTwistUninverted, TrackPitch::None,    TrackPitch::None,  TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_RIGHT_FLYER_TWIST_UP
        {TrackGroup::inlineTwistInverted,   TrackPitch::None,    TrackPitch::None,  TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_LEFT_FLYER_TWIST_DOWN
        {TrackGroup::inlineTwistInverted,   TrackPitch::None,    TrackPitch::None,  TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_RIGHT_FLYER_TWIST_DOWN
        {TrackGroup::flyingHalfLoopUninvertedUp, TrackPitch::None,    TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64                 },  // ELEM_FLYER_HALF_LOOP_UP
        {TrackGroup::flyingHalfLoopInvertedDown, TrackPitch::Down25, TrackPitch::None,  TrackRoll::UpsideDown, TrackRoll::None, -64                },  // ELEM_FLYER_HALF_LOOP_DOWN
        {TrackGroup::corkscrewUninverted,    TrackPitch::None,    TrackPitch::None,  TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_LEFT_FLYER_CORKSCREW_UP
        {TrackGroup::corkscrewUninverted,    TrackPitch::None,    TrackPitch::None,  TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_RIGHT_FLYER_CORKSCREW_UP
        {TrackGroup::corkscrewInverted,      TrackPitch::None,    TrackPitch::None,  TrackRoll::UpsideDown, TrackRoll::None,        -32                },  // ELEM_LEFT_FLYER_CORKSCREW_DOWN
        {TrackGroup::corkscrewInverted,      TrackPitch::None,    TrackPitch::None,  TrackRoll::UpsideDown, TrackRoll::None,        -32                },  // ELEM_RIGHT_FLYER_CORKSCREW_DOWN
        {TrackGroup::heartlineTransfer,      TrackPitch::None,    TrackPitch::None,  TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_HEARTLINE_TRANSFER_UP
        {TrackGroup::heartlineTransfer,      TrackPitch::None,    TrackPitch::None,  TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_HEARTLINE_TRANSFER_DOWN
        {TrackGroup::heartlineRoll,          TrackPitch::None,    TrackPitch::None,  TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_HEARTLINE_ROLL
        {TrackGroup::heartlineRoll,          TrackPitch::None,    TrackPitch::None,  TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_HEARTLINE_ROLL
        {TrackGroup::miniGolfHole,          TrackPitch::None,    TrackPitch::None,  TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_MINI_GOLF_HOLE_A
        {TrackGroup::miniGolfHole,          TrackPitch::None,    TrackPitch::None,  TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_MINI_GOLF_HOLE_B
        {TrackGroup::miniGolfHole,          TrackPitch::None,    TrackPitch::None,  TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_MINI_GOLF_HOLE_C
        {TrackGroup::miniGolfHole,          TrackPitch::None,    TrackPitch::None,  TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_MINI_GOLF_HOLE_D
        {TrackGroup::miniGolfHole,          TrackPitch::None,    TrackPitch::None,  TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_MINI_GOLF_HOLE_E
        { TrackGroup::quarterLoopInvertedDown, TrackPitch::Down90,    TrackPitch::None,           TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN
        { TrackGroup::quarterLoop,           TrackPitch::None,           TrackPitch::Up90,          TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_90_DEG_TO_INVERTED_FLAT_QUARTER_LOOP_UP
        { TrackGroup::quarterLoop,           TrackPitch::Down90,        TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, 0                  },  // ELEM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN
        { TrackGroup::liftHillCurved,       TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_CURVED_LIFT_HILL
        { TrackGroup::liftHillCurved,       TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_CURVED_LIFT_HILL
        { TrackGroup::reverser,               TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_REVERSER
        { TrackGroup::reverser,               TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_REVERSER
        { TrackGroup::slopeToFlat,          TrackPitch::Down90,        TrackPitch::Up90,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_AIR_THRUST_TOP_CAP
        { TrackGroup::slopeToFlat,          TrackPitch::Down90,        TrackPitch::Down90,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_AIR_THRUST_VERTICAL_DOWN
        { TrackGroup::slopeToFlat,          TrackPitch::None,           TrackPitch::Down90,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_AIR_THRUST_VERTICAL_DOWN_TO_LEVEL
        { TrackGroup::blockBrakes,           TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_BLOCK_BRAKES
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::Left,        TrackRoll::None,        0                  },  // ELEM_25_DEG_UP_TO_LEFT_BANKED_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::Right,       TrackRoll::None,        0                  },  // ELEM_25_DEG_UP_TO_RIGHT_BANKED_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::None,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANKED_25_DEG_UP_TO_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::Up25,          TrackRoll::None,        TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANKED_25_DEG_UP_TO_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::Left,        TrackRoll::None,        0                  },  // ELEM_25_DEG_DOWN_TO_LEFT_BANKED_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::Right,       TrackRoll::None,        0                  },  // ELEM_25_DEG_DOWN_TO_RIGHT_BANKED_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::None,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::Down25,        TrackRoll::None,        TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::None,           TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::None,           TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Up25,          TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANKED_25_DEG_UP_TO_LEFT_BANKED_FLAT
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Up25,          TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANKED_25_DEG_UP_TO_RIGHT_BANKED_FLAT
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::None,           TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::None,           TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down25,        TrackRoll::Left,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_LEFT_BANKED_FLAT
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down25,        TrackRoll::Right,       TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_RIGHT_BANKED_FLAT
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::None,           TrackRoll::Left,        TrackRoll::None,        0                  },  // ELEM_FLAT_TO_LEFT_BANKED_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up25,          TrackPitch::None,           TrackRoll::Right,       TrackRoll::None,        0                  },  // ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_UP
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Up25,          TrackRoll::None,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANKED_25_DEG_UP_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Up25,          TrackRoll::None,        TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANKED_25_DEG_UP_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::None,           TrackRoll::Left,        TrackRoll::None,        0                  },  // ELEM_FLAT_TO_LEFT_BANKED_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down25,        TrackPitch::None,           TrackRoll::Right,       TrackRoll::None,        0                  },  // ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down25,        TrackRoll::None,        TrackRoll::Left,        0                  },  // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::None,           TrackPitch::Down25,        TrackRoll::None,        TrackRoll::Right,       0                  },  // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_FLAT
        { TrackGroup::flat,                   TrackPitch::Up90,          TrackPitch::Up90,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Up90,          TrackPitch::Up90,          TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_UP
        { TrackGroup::flat,                   TrackPitch::Down90,        TrackPitch::Down90,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_DOWN
        { TrackGroup::flat,                   TrackPitch::Down90,        TrackPitch::Down90,        TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_DOWN
        { TrackGroup::quarterLoopUninvertedUp, TrackPitch::None,       TrackPitch::Up90,          TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_MULTIDIM_90_DEG_UP_TO_INVERTED_FLAT_QUARTER_LOOP
        { TrackGroup::quarterLoopUninvertedDown, TrackPitch::Down90,  TrackPitch::None,           TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // ELEM_MULTIDIM_FLAT_TO_90_DEG_DOWN_QUARTER_LOOP
        { TrackGroup::quarterLoopInvertedUp,     TrackPitch::None,     TrackPitch::Up90,          TrackRoll::UpsideDown, TrackRoll::None,        0                  }, // ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_UP_QUARTER_LOOP
        { TrackGroup::rotationControlToggle,TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // ELEM_ROTATION_CONTROL_TOGGLE
        { TrackGroup::flatRideBase,         TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // TrackElemType::FlatTrack1x4A
        { TrackGroup::flatRideBase,         TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // TrackElemType::FlatTrack2x2
        { TrackGroup::flatRideBase,         TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // TrackElemType::FlatTrack4x4
        { TrackGroup::flatRideBase,         TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // TrackElemType::FlatTrack2x4
        { TrackGroup::flatRideBase,         TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // TrackElemType::FlatTrack1x5
        { TrackGroup::flatRideBase,         TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // TrackElemType::FlatTrack1x1A
        { TrackGroup::flatRideBase,         TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // TrackElemType::FlatTrack1x4B
        { TrackGroup::flatRideBase,         TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // TrackElemType::FlatTrack1x1B
        { TrackGroup::flatRideBase,         TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        -40                },  // TrackElemType::FlatTrack1x4C
        { TrackGroup::flatRideBase,         TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0                  },  // TrackElemType::FlatTrack3x3
        { TrackGroup::corkscrewLarge,        TrackPitch::None,           TrackPitch::None,           TrackRoll::UpsideDown, TrackRoll::None,        32                 },  // TrackElemType::LeftLargeCorkscrewUp
        { TrackGroup::corkscrewLarge,        TrackPitch::None,           TrackPitch::None,           TrackRoll::UpsideDown, TrackRoll::None,        32                 },  // TrackElemType::RightLargeCorkscrewUp
        { TrackGroup::corkscrewLarge,        TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, -32                },  // TrackElemType::LeftLargeCorkscrewDown
        { TrackGroup::corkscrewLarge,        TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, -32                },  // TrackElemType::RightLargeCorkscrewDown
        { TrackGroup::halfLoopMedium,       TrackPitch::None,           TrackPitch::Up25,          TrackRoll::UpsideDown, TrackRoll::None,        64                 },  // TrackElemType::LeftMediumHalfLoopUp
        { TrackGroup::halfLoopMedium,       TrackPitch::None,           TrackPitch::Up25,          TrackRoll::UpsideDown, TrackRoll::None,        64                 },  // TrackElemType::RightMediumHalfLoopUp
        { TrackGroup::halfLoopMedium,       TrackPitch::Down25,        TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, -64                },  // TrackElemType::LeftMediumHalfLoopDown
        { TrackGroup::halfLoopMedium,       TrackPitch::Down25,        TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, -64                },  // TrackElemType::RightMediumHalfLoopDown
        { TrackGroup::zeroGRoll,            TrackPitch::None,           TrackPitch::Up25,          TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // TrackElemType::LeftZeroGRollUp
        { TrackGroup::zeroGRoll,            TrackPitch::None,           TrackPitch::Up25,          TrackRoll::UpsideDown, TrackRoll::None,        0                  },  // TrackElemType::RightZeroGRollUp
        { TrackGroup::zeroGRoll,            TrackPitch::Down25,        TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, 0                  },  // TrackElemType::LeftZeroGRollDown
        { TrackGroup::zeroGRoll,            TrackPitch::Down25,        TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, 0                  },  // TrackElemType::RightZeroGRollDown
        { TrackGroup::zeroGRollLarge,      TrackPitch::None,           TrackPitch::Up60,          TrackRoll::UpsideDown, TrackRoll::None,        64                 },  // TrackElemType::LeftLargeZeroGRollUp
        { TrackGroup::zeroGRollLarge,      TrackPitch::None,           TrackPitch::Up60,          TrackRoll::UpsideDown, TrackRoll::None,        64                 },  // TrackElemType::RightLargeZeroGRollUp
        { TrackGroup::zeroGRollLarge,      TrackPitch::Down60,        TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, -64                },  // TrackElemType::LeftLargeZeroGRollDown
        { TrackGroup::zeroGRollLarge,      TrackPitch::Down60,        TrackPitch::None,           TrackRoll::None,        TrackRoll::UpsideDown, -64                },  // TrackElemType::RightLargeZeroGRollDown
        { TrackGroup::flyingLargeHalfLoopUninvertedUp,   TrackPitch::None,    TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None,        64                 },  // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp
        { TrackGroup::flyingLargeHalfLoopUninvertedUp,   TrackPitch::None,    TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None,        64                 },  // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp                                                                                                       
        { TrackGroup::flyingLargeHalfLoopInvertedDown,   TrackPitch::Down25, TrackPitch::None,  TrackRoll::UpsideDown, TrackRoll::None,       -64                 },  // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown                                                                                                       
        { TrackGroup::flyingLargeHalfLoopInvertedDown,   TrackPitch::Down25, TrackPitch::None,  TrackRoll::UpsideDown, TrackRoll::None,       -64                 },  // TrackElemType::RightFlyerLargeHalfLoopInvertedDown
        { TrackGroup::flyingLargeHalfLoopInvertedUp,     TrackPitch::None,    TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None,        64                 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp
        { TrackGroup::flyingLargeHalfLoopInvertedUp,     TrackPitch::None,    TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None,        64                 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp
        { TrackGroup::flyingLargeHalfLoopUninvertedDown, TrackPitch::Down25, TrackPitch::None,  TrackRoll::UpsideDown, TrackRoll::None,       -64                 },  // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown
        { TrackGroup::flyingLargeHalfLoopUninvertedDown, TrackPitch::Down25, TrackPitch::None,  TrackRoll::UpsideDown, TrackRoll::None,       -64                 },  // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown
        { TrackGroup::flyingHalfLoopInvertedUp,           TrackPitch::None,    TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None,        64                 },  // TrackElemType::FlyerHalfLoopInvertedUp
        { TrackGroup::flyingHalfLoopUninvertedDown,       TrackPitch::Down25, TrackPitch::None,  TrackRoll::UpsideDown, TrackRoll::None,       -64                 },  // TrackElemType::FlyerHalfLoopUninvertedDown
        { TrackGroup::slopeCurveLarge,                      TrackPitch::Up25,   TrackPitch::Up25,   TrackRoll::None,        TrackRoll::None,      16                 },  // TrackElemType::LeftEighthToDiagUp25
        { TrackGroup::slopeCurveLarge,                      TrackPitch::Up25,   TrackPitch::Up25,   TrackRoll::None,        TrackRoll::None,      16                 },  // TrackElemType::RightEighthToDiagUp25
        { TrackGroup::slopeCurveLarge,                      TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None,        TrackRoll::None,     -16                 },  // TrackElemType::LeftEighthToDiagDown25
        { TrackGroup::slopeCurveLarge,                      TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None,        TrackRoll::None,     -16                 },  // TrackElemType::RightEighthToDiagDown25
        { TrackGroup::slopeCurveLarge,                      TrackPitch::Up25,   TrackPitch::Up25,   TrackRoll::None,        TrackRoll::None,      16                 },  // TrackElemType::LeftEighthToOrthogonalUp25
        { TrackGroup::slopeCurveLarge,                      TrackPitch::Up25,   TrackPitch::Up25,   TrackRoll::None,        TrackRoll::None,      16                 },  // TrackElemType::RightEighthToOrthogonalUp25
        { TrackGroup::slopeCurveLarge,                      TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None,        TrackRoll::None,     -16                 },  // TrackElemType::LeftEighthToOrthogonalDown25
        { TrackGroup::slopeCurveLarge,                      TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None,        TrackRoll::None,     -16                 },  // TrackElemType::RightEighthToOrthogonalDown25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Up25,   TrackPitch::Up25,   TrackRoll::Left,        TrackRoll::None,       0 }, // TrackElemType::DiagUp25ToLeftBankedUp25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Up25,   TrackPitch::Up25,   TrackRoll::Right,       TrackRoll::None,       0 }, // TrackElemType::DiagUp25ToRightBankedUp25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Up25,   TrackPitch::Up25,   TrackRoll::None,        TrackRoll::Left,       0 }, // TrackElemType::DiagLeftBankedUp25ToUp25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Up25,   TrackPitch::Up25,   TrackRoll::None,        TrackRoll::Right,      0 }, // TrackElemType::DiagRightBankedUp25ToUp25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left,        TrackRoll::None,       0 }, // TrackElemType::DiagDown25ToLeftBankedDown25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right,       TrackRoll::None,       0 }, // TrackElemType::DiagDown25ToRightBankedDown25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None,        TrackRoll::Left,       0 }, // TrackElemType::DiagLeftBankedDown25ToDown25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None,        TrackRoll::Right,      0 }, // TrackElemType::DiagRightBankedDown25ToDown25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Up25,   TrackPitch::None,    TrackRoll::Left,        TrackRoll::Left,       0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Up25,   TrackPitch::None,    TrackRoll::Right,       TrackRoll::Right,      0 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::None,    TrackPitch::Up25,   TrackRoll::Left,        TrackRoll::Left,       0 }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::None,    TrackPitch::Up25,   TrackRoll::Right,       TrackRoll::Right,      0 }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Down25, TrackPitch::None,    TrackRoll::Left,        TrackRoll::Left,       0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Down25, TrackPitch::None,    TrackRoll::Right,       TrackRoll::Right,      0 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::None,    TrackPitch::Down25, TrackRoll::Left,        TrackRoll::Left,       0 }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::None,    TrackPitch::Down25, TrackRoll::Right,       TrackRoll::Right,      0 }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Up25,   TrackPitch::None,    TrackRoll::Left,        TrackRoll::None,       0 }, // TrackElemType::DiagFlatToLeftBankedUp25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Up25,   TrackPitch::None,    TrackRoll::Right,       TrackRoll::None,       0 }, // TrackElemType::DiagFlatToRightBankedUp25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::None,    TrackPitch::Up25,   TrackRoll::None,        TrackRoll::Left,       0 }, // TrackElemType::DiagLeftBankedUp25ToFlat
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::None,    TrackPitch::Up25,   TrackRoll::None,        TrackRoll::Right,      0 }, // TrackElemType::DiagRightBankedUp25ToFlat
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Down25, TrackPitch::None,    TrackRoll::Left,        TrackRoll::None,       0 }, // TrackElemType::DiagFlatToLeftBankedDown25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Down25, TrackPitch::None,    TrackRoll::Right,       TrackRoll::None,       0 }, // TrackElemType::DiagFlatToRightBankedDown25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::None,    TrackPitch::Down25, TrackRoll::None,        TrackRoll::Left,       0 }, // TrackElemType::DiagLeftBankedDown25ToFlat
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::None,    TrackPitch::Down25, TrackRoll::None,        TrackRoll::Right,      0 }, // TrackElemType::DiagRightBankedDown25ToFlat
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Up25,   TrackPitch::Up25,   TrackRoll::Left,        TrackRoll::Left,       0 }, // TrackElemType::Up25LeftBanked
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Up25,   TrackPitch::Up25,   TrackRoll::Right,       TrackRoll::Right,      0 }, // TrackElemType::Up25RightBanked 
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left,        TrackRoll::Left,       0 }, // TrackElemType::Down25LeftBanked
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right,       TrackRoll::Right,      0 }, // TrackElemType::Down25RightBanked
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Up25,   TrackPitch::Up25,   TrackRoll::Left,        TrackRoll::Left,      16 }, // TrackElemType::LeftEighthBankToDiagUp25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Up25,   TrackPitch::Up25,   TrackRoll::Right,       TrackRoll::Right,     16 }, // TrackElemType::RightEighthBankToDiagUp25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left,        TrackRoll::Left,     -16 }, // TrackElemType::LeftEighthBankToDiagDown25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right,       TrackRoll::Right,    -16 }, // TrackElemType::RightEighthBankToDiagDown25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Up25,   TrackPitch::Up25,   TrackRoll::Left,        TrackRoll::Left,      16 }, // TrackElemType::LeftEighthBankToOrthogonalUp25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Up25,   TrackPitch::Up25,   TrackRoll::Right,       TrackRoll::Right,     16 }, // TrackElemType::RightEighthBankToOrthogonalUp25 
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left,        TrackRoll::Left,     -16 }, // TrackElemType::LeftEighthBankToOrthogonalDown25
        { TrackGroup::slopeCurveLargeBanked,               TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right,       TrackRoll::Right,    -16 }, // TrackElemType::RightEighthBankToOrthogonalDown25
        { TrackGroup::diagBrakes,            TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0  }, // TrackElemType::DiagBrakes
        { TrackGroup::diagBlockBrakes,      TrackPitch::None,           TrackPitch::None,           TrackRoll::None,        TrackRoll::None,        0  }, // TrackElemType::DiagBlockBrakes
    };
    static_assert(std::size(TrackDefinitions) == TrackElemType::Count);

    // clang-format on

    constexpr static SpinFunction TrackTypeToSpinFunction[] = {
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::L8,   SpinFunction::R8,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::L8,   SpinFunction::R8,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::L8,   SpinFunction::R8,
        SpinFunction::L8,   SpinFunction::R8,   SpinFunction::LR,   SpinFunction::RL,   SpinFunction::None, SpinFunction::None,
        SpinFunction::L7,   SpinFunction::R7,   SpinFunction::L7,   SpinFunction::R7,   SpinFunction::L7,   SpinFunction::R7,
        SpinFunction::L7,   SpinFunction::R7,   SpinFunction::L5,   SpinFunction::R5,   SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::L8,   SpinFunction::R8,   SpinFunction::LR,
        SpinFunction::RL,   SpinFunction::L7,   SpinFunction::R7,   SpinFunction::L7,   SpinFunction::R7,   SpinFunction::L7,
        SpinFunction::R7,   SpinFunction::L8,   SpinFunction::R8,   SpinFunction::L8,   SpinFunction::R8,   SpinFunction::L5,
        SpinFunction::R5,   SpinFunction::L5,   SpinFunction::R5,   SpinFunction::None, SpinFunction::RC,   SpinFunction::None,
        SpinFunction::L8,   SpinFunction::R8,   SpinFunction::L8,   SpinFunction::R8,   SpinFunction::L8,   SpinFunction::R8,
        SpinFunction::L8,   SpinFunction::R8,   SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::SP,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::R5,   SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::L9,   SpinFunction::R9,   SpinFunction::L9,   SpinFunction::R9,   SpinFunction::L9,
        SpinFunction::R9,   SpinFunction::L9,   SpinFunction::R9,   SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::L7,   SpinFunction::R7,
        SpinFunction::L7,   SpinFunction::R7,   SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::L7,
        SpinFunction::R7,   SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::L7,   SpinFunction::R7,   SpinFunction::L7,   SpinFunction::R7,   SpinFunction::L8,
        SpinFunction::R8,   SpinFunction::L8,   SpinFunction::R8,   SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::L9,
        SpinFunction::R9,   SpinFunction::L9,   SpinFunction::R9,   SpinFunction::L9,   SpinFunction::R9,   SpinFunction::L9,
        SpinFunction::R9,   SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None,
        SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::None, SpinFunction::L9,
        SpinFunction::R9,   SpinFunction::L9,   SpinFunction::R9,   SpinFunction::L9,   SpinFunction::R9,   SpinFunction::L9,
        SpinFunction::R9,   SpinFunction::None, SpinFunction::None,
    };
    static_assert(std::size(TrackTypeToSpinFunction) == TrackElemType::Count);

    template<int32_t TConstant> static int32_t EvaluatorConst(const int16_t)
    {
        return TConstant;
    }

    static int32_t EvaluatorVerticalLoop(const int16_t progress)
    {
        return (abs(progress - 155) / 2) + 28;
    }

    static int32_t EvaluatorHalfLoopUp(const int16_t progress)
    {
        return ((static_cast<uint16_t>(-(progress - 155))) / 2) + 28;
    }

    static int32_t EvaluatorHalfLoopDown(const int16_t progress)
    {
        return (progress / 2) + 28;
    }

    static int32_t EvaluatorLargeZeroGRollUp(const int16_t progress)
    {
        if (progress > 114)
            return (371 - 2 * progress);
        return 0;
    }

    static int32_t EvaluatorLargeZeroGRollDown(const int16_t progress)
    {
        if (progress < 38)
            return 67 + 2 * progress;
        return 0;
    }

    static int32_t EvaluatorLargeZeroGRollUpLeft(const int16_t progress)
    {
        return 387 - 2 * progress;
    }

    static int32_t EvaluatorLargeZeroGRollUpRight(const int16_t progress)
    {
        return 2 * progress - 387;
    }

    static int32_t EvaluatorLargeZeroGRollDownLeft(const int16_t progress)
    {
        return 83 + 2 * progress;
    }

    static int32_t EvaluatorLargeZeroGRollDownRight(const int16_t progress)
    {
        return -(83 + 2 * progress);
    }

    static int32_t EvaluatorZeroGRollUpLeft(const int16_t progress)
    {
        return 174 - progress;
    }

    static int32_t EvaluatorZeroGRollUpRight(const int16_t progress)
    {
        return progress - 174;
    }

    static int32_t EvaluatorZeroGRollDownLeft(const int16_t progress)
    {
        return 73 + progress;
    }

    static int32_t EvaluatorZeroGRollDownRight(const int16_t progress)
    {
        return -(73 + progress);
    }

    static int32_t EvaluatorWaterSplash(const int16_t progress)
    {
        if (progress < 32)
            return -150;
        if (progress < 64)
            return 150;
        if (progress < 96)
            return 0;
        if (progress < 128)
            return 150;
        return -150;
    }

    static int32_t EvaluatorQuarterTurn3Tiles(const int16_t progress)
    {
        return -(progress / 2) + 134;
    }

    static int32_t EvaluatorMediumHalfLoopUp(const int16_t progress)
    {
        return (244 - progress) / 4 + 51;
    }

    static int32_t EvaluatorMediumHalfLoopDown(const int16_t progress)
    {
        return (progress / 4) + 51;
    }

    static int32_t EvaluatorLargeHalfLoopUp(const int16_t progress)
    {
        return ((static_cast<uint16_t>(-(progress - 311))) / 4) + 46;
    }

    static int32_t EvaluatorLargeHalfLoopDown(const int16_t progress)
    {
        return (progress / 4) + 46;
    }

    static int32_t EvaluatorHeartLineTransferUp(const int16_t progress)
    {
        if (progress < 32)
            return 103;
        if (progress < 64)
            return -103;
        if (progress < 96)
            return 0;
        if (progress < 128)
            return 103;
        return -103;
    }

    static int32_t EvaluatorHeartLineTransferDown(const int16_t progress)
    {
        if (progress < 32)
            return -103;
        if (progress < 64)
            return 103;
        if (progress < 96)
            return 0;
        if (progress < 128)
            return -103;
        return 103;
    }

    static int32_t EvaluatorDown90QuarterLoop(const int16_t progress)
    {
        return (progress / 4) + 55;
    }

    static int32_t EvaluatorUp90QuarterLoop(const int16_t progress)
    {
        return ((static_cast<uint16_t>(-(progress - 137))) / 4) + 55;
    }

    static int32_t EvaluatorSBendLeft(const int16_t progress)
    {
        return (progress < 48) ? 98 : -98;
    }

    static int32_t EvaluatorSBendRight(const int16_t progress)
    {
        return (progress < 48) ? -98 : 98;
    }

    static constexpr TrackComputeFunction GetLateralFunction(const uint16_t type)
    {
        switch (type)
        {
            case TrackElemType::Flat:
            case TrackElemType::EndStation:
            case TrackElemType::BeginStation:
            case TrackElemType::MiddleStation:
            case TrackElemType::Up25:
            case TrackElemType::Up60: //
            case TrackElemType::Down25:
            case TrackElemType::Down60: //
            case TrackElemType::FlatToLeftBank:
            case TrackElemType::FlatToRightBank:
            case TrackElemType::LeftBankToFlat:
            case TrackElemType::RightBankToFlat: //
            case TrackElemType::LeftBank:
            case TrackElemType::RightBank:
            case TrackElemType::TowerBase:
            case TrackElemType::TowerSection:
            case TrackElemType::FlatCovered:
            case TrackElemType::Up25Covered:
            case TrackElemType::Up60Covered:
            case TrackElemType::Down25Covered:
            case TrackElemType::Down60Covered:
            case TrackElemType::Brakes:
            case TrackElemType::RotationControlToggle:
            case TrackElemType::Maze:
            case TrackElemType::Up25LeftBanked:
            case TrackElemType::Up25RightBanked:
            case TrackElemType::Waterfall:
            case TrackElemType::Rapids:
            case TrackElemType::OnRidePhoto:
            case TrackElemType::Down25LeftBanked:
            case TrackElemType::Down25RightBanked:
            case TrackElemType::Whirlpool:
            case TrackElemType::ReverseFreefallVertical:
            case TrackElemType::Up90:
            case TrackElemType::Down90:
            case TrackElemType::DiagFlat:
            case TrackElemType::DiagUp25:
            case TrackElemType::DiagUp60:
            case TrackElemType::DiagDown25:
            case TrackElemType::DiagDown60:
            case TrackElemType::DiagFlatToLeftBank:
            case TrackElemType::DiagFlatToRightBank:
            case TrackElemType::DiagLeftBankToFlat:
            case TrackElemType::DiagRightBankToFlat:
            case TrackElemType::DiagLeftBank:
            case TrackElemType::DiagRightBank:
            case TrackElemType::LogFlumeReverser:
            case TrackElemType::SpinningTunnel:
            case TrackElemType::PoweredLift:
            case TrackElemType::MinigolfHoleA:
            case TrackElemType::MinigolfHoleB:
            case TrackElemType::MinigolfHoleC:
            case TrackElemType::MinigolfHoleD:
            case TrackElemType::MinigolfHoleE:
            case TrackElemType::LeftReverser:
            case TrackElemType::RightReverser:
            case TrackElemType::AirThrustVerticalDown:
            case TrackElemType::BlockBrakes:
            case TrackElemType::Up25ToLeftBankedUp25:
            case TrackElemType::Up25ToRightBankedUp25:
            case TrackElemType::LeftBankedUp25ToUp25:
            case TrackElemType::RightBankedUp25ToUp25:
            case TrackElemType::Down25ToLeftBankedDown25:
            case TrackElemType::Down25ToRightBankedDown25:
            case TrackElemType::LeftBankedDown25ToDown25:
            case TrackElemType::RightBankedDown25ToDown25:
            case TrackElemType::LeftQuarterTurn1TileUp90:
            case TrackElemType::RightQuarterTurn1TileUp90:
            case TrackElemType::LeftQuarterTurn1TileDown90:
            case TrackElemType::RightQuarterTurn1TileDown90:
                return EvaluatorConst<0>;
            case TrackElemType::FlatToUp25:   //
            case TrackElemType::Down25ToFlat: //
            case TrackElemType::LeftBankToUp25:
            case TrackElemType::RightBankToUp25:
            case TrackElemType::Down25ToLeftBank:
            case TrackElemType::Down25ToRightBank:
            case TrackElemType::FlatToUp25Covered:
            case TrackElemType::Down25ToFlatCovered:
            case TrackElemType::LeftBankedFlatToLeftBankedUp25:
            case TrackElemType::RightBankedFlatToRightBankedUp25:
            case TrackElemType::LeftBankedDown25ToLeftBankedFlat:
            case TrackElemType::RightBankedDown25ToRightBankedFlat:
            case TrackElemType::FlatToLeftBankedUp25:
            case TrackElemType::FlatToRightBankedUp25:
            case TrackElemType::LeftBankedDown25ToFlat:
            case TrackElemType::RightBankedDown25ToFlat:
            case TrackElemType::DiagUp25ToLeftBankedUp25:
            case TrackElemType::DiagUp25ToRightBankedUp25:
            case TrackElemType::DiagLeftBankedUp25ToUp25:
            case TrackElemType::DiagRightBankedUp25ToUp25:
            case TrackElemType::DiagDown25ToLeftBankedDown25:
            case TrackElemType::DiagDown25ToRightBankedDown25:
            case TrackElemType::DiagLeftBankedDown25ToDown25:
            case TrackElemType::DiagRightBankedDown25ToDown25:
            case TrackElemType::DiagLeftBankedFlatToLeftBankedUp25:
            case TrackElemType::DiagRightBankedFlatToRightBankedUp25:
            case TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat:
            case TrackElemType::DiagRightBankedUp25ToRightBankedFlat:
            case TrackElemType::DiagLeftBankedFlatToLeftBankedDown25:
            case TrackElemType::DiagRightBankedFlatToRightBankedDown25:
            case TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat:
            case TrackElemType::DiagRightBankedDown25ToRightBankedFlat:
            case TrackElemType::DiagFlatToLeftBankedUp25:
            case TrackElemType::DiagFlatToRightBankedUp25:
            case TrackElemType::DiagLeftBankedUp25ToFlat:
            case TrackElemType::DiagRightBankedUp25ToFlat:
            case TrackElemType::DiagFlatToLeftBankedDown25:
            case TrackElemType::DiagFlatToRightBankedDown25:
            case TrackElemType::DiagLeftBankedDown25ToFlat:
            case TrackElemType::DiagRightBankedDown25ToFlat:
            case TrackElemType::DiagUp25LeftBanked:
            case TrackElemType::DiagUp25RightBanked:
            case TrackElemType::DiagDown25LeftBanked:
            case TrackElemType::DiagDown25RightBanked:
                return EvaluatorConst<0>;
            case TrackElemType::Up25ToFlat:   //
            case TrackElemType::FlatToDown25: //
            case TrackElemType::Up25ToLeftBank:
            case TrackElemType::Up25ToRightBank:
            case TrackElemType::LeftBankToDown25:
            case TrackElemType::RightBankToDown25:
            case TrackElemType::Up25ToFlatCovered:
            case TrackElemType::FlatToDown25Covered:
            case TrackElemType::CableLiftHill:
            case TrackElemType::LeftBankedUp25ToLeftBankedFlat:
            case TrackElemType::RightBankedUp25ToRightBankedFlat:
            case TrackElemType::LeftBankedFlatToLeftBankedDown25:
            case TrackElemType::RightBankedFlatToRightBankedDown25:
            case TrackElemType::LeftBankedUp25ToFlat:
            case TrackElemType::RightBankedUp25ToFlat:
            case TrackElemType::FlatToLeftBankedDown25:
            case TrackElemType::FlatToRightBankedDown25:
                return EvaluatorConst<0>;
            case TrackElemType::Up25ToUp60:     //
            case TrackElemType::Down60ToDown25: //
            case TrackElemType::Up25ToUp60Covered:
            case TrackElemType::Down60ToDown25Covered:
                return EvaluatorConst<0>;
            case TrackElemType::Up60ToUp25:     //
            case TrackElemType::Down25ToDown60: //
            case TrackElemType::Up60ToUp25Covered:
            case TrackElemType::Down25ToDown60Covered:
                return EvaluatorConst<0>;
            case TrackElemType::LeftQuarterTurn5Tiles: //
            case TrackElemType::LeftQuarterTurn5TilesUp25:
            case TrackElemType::LeftQuarterTurn5TilesDown25:
            case TrackElemType::LeftTwistDownToUp:
            case TrackElemType::LeftTwistUpToDown:
            case TrackElemType::LeftQuarterTurn5TilesCovered:
            case TrackElemType::LeftQuarterHelixLargeUp:
            case TrackElemType::LeftQuarterHelixLargeDown:
            case TrackElemType::LeftFlyerTwistUp:
            case TrackElemType::LeftFlyerTwistDown:
            case TrackElemType::LeftHeartLineRoll:
                return EvaluatorConst<98>;
            case TrackElemType::RightQuarterTurn5Tiles: //
            case TrackElemType::RightQuarterTurn5TilesUp25:
            case TrackElemType::RightQuarterTurn5TilesDown25:
            case TrackElemType::RightTwistDownToUp:
            case TrackElemType::RightTwistUpToDown:
            case TrackElemType::RightQuarterTurn5TilesCovered:
            case TrackElemType::RightQuarterHelixLargeUp:
            case TrackElemType::RightQuarterHelixLargeDown:
            case TrackElemType::RightFlyerTwistUp:
            case TrackElemType::RightFlyerTwistDown:
            case TrackElemType::RightHeartLineRoll:
                return EvaluatorConst<-98>;
            case TrackElemType::BankedLeftQuarterTurn5Tiles:
            case TrackElemType::LeftHalfBankedHelixUpLarge:
            case TrackElemType::LeftHalfBankedHelixDownLarge:
            case TrackElemType::LeftQuarterBankedHelixLargeUp:
            case TrackElemType::LeftQuarterBankedHelixLargeDown:
                return EvaluatorConst<160>;
            case TrackElemType::BankedRightQuarterTurn5Tiles:
            case TrackElemType::RightHalfBankedHelixUpLarge:
            case TrackElemType::RightHalfBankedHelixDownLarge:
            case TrackElemType::RightQuarterBankedHelixLargeUp:
            case TrackElemType::RightQuarterBankedHelixLargeDown:
                return EvaluatorConst<-160>;
            case TrackElemType::SBendLeft:
            case TrackElemType::SBendLeftCovered:
                return EvaluatorSBendLeft;
            case TrackElemType::SBendRight:
            case TrackElemType::SBendRightCovered:
                return EvaluatorSBendRight;
            case TrackElemType::LeftVerticalLoop:
            case TrackElemType::RightVerticalLoop:
                return EvaluatorConst<0>;
            case TrackElemType::LeftQuarterTurn3Tiles:
            case TrackElemType::LeftQuarterTurn3TilesUp25:
            case TrackElemType::LeftQuarterTurn3TilesDown25:
            case TrackElemType::LeftQuarterTurn3TilesCovered:
            case TrackElemType::LeftCurvedLiftHill:
                return EvaluatorConst<59>;
            case TrackElemType::RightQuarterTurn3Tiles:
            case TrackElemType::RightQuarterTurn3TilesUp25:
            case TrackElemType::RightQuarterTurn3TilesDown25:
            case TrackElemType::RightQuarterTurn3TilesCovered:
            case TrackElemType::RightCurvedLiftHill:
                return EvaluatorConst<-59>;
            case TrackElemType::LeftBankedQuarterTurn3Tiles:
            case TrackElemType::LeftHalfBankedHelixUpSmall:
            case TrackElemType::LeftHalfBankedHelixDownSmall:
                return EvaluatorConst<100>;
            case TrackElemType::RightBankedQuarterTurn3Tiles:
            case TrackElemType::RightHalfBankedHelixUpSmall:
            case TrackElemType::RightHalfBankedHelixDownSmall:
                return EvaluatorConst<-100>;
            case TrackElemType::LeftQuarterTurn1Tile:
                return EvaluatorConst<45>;
            case TrackElemType::RightQuarterTurn1Tile:
                return EvaluatorConst<-45>;
            case TrackElemType::HalfLoopUp:
            case TrackElemType::FlyerHalfLoopUninvertedUp:
            case TrackElemType::FlyerHalfLoopInvertedUp:
                return EvaluatorConst<0>;
            case TrackElemType::HalfLoopDown:
            case TrackElemType::FlyerHalfLoopInvertedDown:
            case TrackElemType::FlyerHalfLoopUninvertedDown:
                return EvaluatorConst<0>;
            case TrackElemType::LeftLargeCorkscrewUp:
            case TrackElemType::RightLargeCorkscrewDown:
                return EvaluatorConst<117>;
            case TrackElemType::RightLargeCorkscrewUp:
            case TrackElemType::LeftLargeCorkscrewDown:
                return EvaluatorConst<-117>;
            case TrackElemType::LeftCorkscrewUp:
            case TrackElemType::RightCorkscrewDown:
            case TrackElemType::LeftFlyerCorkscrewUp:
            case TrackElemType::RightFlyerCorkscrewDown:
                return EvaluatorConst<70>;
            case TrackElemType::RightCorkscrewUp:
            case TrackElemType::LeftCorkscrewDown:
            case TrackElemType::RightFlyerCorkscrewUp:
            case TrackElemType::LeftFlyerCorkscrewDown:
                return EvaluatorConst<-70>;
            case TrackElemType::FlatToUp60:
            case TrackElemType::Down60ToFlat:
                return EvaluatorConst<0>;
            case TrackElemType::Up60ToFlat:
            case TrackElemType::FlatToDown60:
            case TrackElemType::BrakeForDrop:
                return EvaluatorConst<0>;
            case TrackElemType::LeftQuarterTurn1TileUp60:
            case TrackElemType::LeftQuarterTurn1TileDown60:
                return EvaluatorConst<88>;
            case TrackElemType::RightQuarterTurn1TileUp60:
            case TrackElemType::RightQuarterTurn1TileDown60:
                return EvaluatorConst<-88>;
            case TrackElemType::Watersplash:
                return EvaluatorConst<0>;
            case TrackElemType::FlatToUp60LongBase:
            case TrackElemType::Down60ToFlatLongBase:
                return EvaluatorConst<0>;
            case TrackElemType::Up60ToFlatLongBase:
            case TrackElemType::FlatToDown60LongBase:
                return EvaluatorConst<0>;
            case TrackElemType::ReverseFreefallSlope:
            case TrackElemType::AirThrustVerticalDownToLevel:
                return EvaluatorConst<0>;
            case TrackElemType::Up60ToUp90:
            case TrackElemType::Down90ToDown60:
                return EvaluatorConst<0>;
            case TrackElemType::Up90ToUp60:
            case TrackElemType::Down60ToDown90:
                return EvaluatorConst<0>;
            case TrackElemType::LeftEighthToDiag:
            case TrackElemType::LeftEighthToOrthogonal:
            case TrackElemType::LeftEighthToDiagUp25:
            case TrackElemType::LeftEighthToDiagDown25:
            case TrackElemType::LeftEighthToOrthogonalUp25:
            case TrackElemType::LeftEighthToOrthogonalDown25:
                return EvaluatorConst<137>;
            case TrackElemType::RightEighthToDiag:
            case TrackElemType::RightEighthToOrthogonal:
            case TrackElemType::RightEighthToDiagUp25:
            case TrackElemType::RightEighthToDiagDown25:
            case TrackElemType::RightEighthToOrthogonalUp25:
            case TrackElemType::RightEighthToOrthogonalDown25:
                return EvaluatorConst<-137>;
            case TrackElemType::LeftEighthBankToDiag:
            case TrackElemType::LeftEighthBankToOrthogonal:
            case TrackElemType::LeftEighthBankToDiagUp25:
            case TrackElemType::LeftEighthBankToDiagDown25:
            case TrackElemType::LeftEighthBankToOrthogonalUp25:
            case TrackElemType::LeftEighthBankToOrthogonalDown25:
                return EvaluatorConst<200>;
            case TrackElemType::RightEighthBankToDiag:
            case TrackElemType::RightEighthBankToOrthogonal:
            case TrackElemType::RightEighthBankToDiagUp25:
            case TrackElemType::RightEighthBankToDiagDown25:
            case TrackElemType::RightEighthBankToOrthogonalUp25:
            case TrackElemType::RightEighthBankToOrthogonalDown25:
                return EvaluatorConst<-200>;
            case TrackElemType::DiagFlatToUp25:
            case TrackElemType::DiagDown25ToFlat:
            case TrackElemType::DiagLeftBankToUp25:
            case TrackElemType::DiagRightBankToUp25:
            case TrackElemType::DiagDown25ToLeftBank:
            case TrackElemType::DiagDown25ToRightBank:
                return EvaluatorConst<0>;
            case TrackElemType::DiagUp25ToFlat:
            case TrackElemType::DiagFlatToDown25:
            case TrackElemType::DiagUp25ToLeftBank:
            case TrackElemType::DiagUp25ToRightBank:
            case TrackElemType::DiagLeftBankToDown25:
            case TrackElemType::DiagRightBankToDown25:
                return EvaluatorConst<0>;
            case TrackElemType::DiagUp25ToUp60:
            case TrackElemType::DiagDown60ToDown25:
                return EvaluatorConst<0>;
            case TrackElemType::DiagUp60ToUp25:
            case TrackElemType::DiagDown25ToDown60:
                return EvaluatorConst<0>;
            case TrackElemType::DiagFlatToUp60:
            case TrackElemType::DiagDown60ToFlat:
                return EvaluatorConst<0>;
            case TrackElemType::DiagUp60ToFlat:
            case TrackElemType::DiagFlatToDown60:
                return EvaluatorConst<0>;
            case TrackElemType::LeftBarrelRollUpToDown:
            case TrackElemType::LeftBarrelRollDownToUp:
                return EvaluatorConst<115>;
            case TrackElemType::RightBarrelRollUpToDown:
            case TrackElemType::RightBarrelRollDownToUp:
                return EvaluatorConst<-115>;
            case TrackElemType::LeftZeroGRollUp:
                return EvaluatorZeroGRollUpLeft;
            case TrackElemType::RightZeroGRollUp:
                return EvaluatorZeroGRollUpRight;
            case TrackElemType::LeftZeroGRollDown:
                return EvaluatorZeroGRollDownLeft;
            case TrackElemType::RightZeroGRollDown:
                return EvaluatorZeroGRollDownRight;
            case TrackElemType::LeftLargeZeroGRollUp:
                return EvaluatorLargeZeroGRollUpLeft;
            case TrackElemType::RightLargeZeroGRollUp:
                return EvaluatorLargeZeroGRollUpRight;
            case TrackElemType::LeftLargeZeroGRollDown:
                return EvaluatorLargeZeroGRollDownLeft;
            case TrackElemType::RightLargeZeroGRollDown:
                return EvaluatorLargeZeroGRollDownRight;
            case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25:
                return EvaluatorConst<90>;
            case TrackElemType::RightBankToRightQuarterTurn3TilesUp25:
                return EvaluatorConst<-90>;
            case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank:
                return EvaluatorConst<90>;
            case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank:
                return EvaluatorConst<-90>;
            case TrackElemType::LeftLargeHalfLoopUp:
            case TrackElemType::RightLargeHalfLoopUp:
                return EvaluatorConst<0>;
            case TrackElemType::LeftLargeHalfLoopDown:
            case TrackElemType::RightLargeHalfLoopDown:
                return EvaluatorConst<0>;
            case TrackElemType::HeartLineTransferUp:
                return EvaluatorConst<0>;
            case TrackElemType::HeartLineTransferDown:
                return EvaluatorConst<0>;
            case TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop:
            case TrackElemType::InvertedFlatToDown90QuarterLoop:
            case TrackElemType::MultiDimFlatToDown90QuarterLoop:
                return EvaluatorConst<0>;
            case TrackElemType::Up90ToInvertedFlatQuarterLoop:
            case TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop:
            case TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop:
                return EvaluatorConst<0>;
            case TrackElemType::AirThrustTopCap:
                return EvaluatorConst<0>;
            case TrackElemType::LeftBankedQuarterTurn3TileUp25:
            case TrackElemType::LeftBankedQuarterTurn3TileDown25:
                return EvaluatorConst<100>;
            case TrackElemType::RightBankedQuarterTurn3TileUp25:
            case TrackElemType::RightBankedQuarterTurn3TileDown25:
                return EvaluatorConst<-100>;
            case TrackElemType::LeftBankedQuarterTurn5TileUp25:
            case TrackElemType::LeftBankedQuarterTurn5TileDown25:
                return EvaluatorConst<160>;
            case TrackElemType::RightBankedQuarterTurn5TileUp25:
            case TrackElemType::RightBankedQuarterTurn5TileDown25:
                return EvaluatorConst<-160>;
            default:
                return EvaluatorConst<0>;
        }
    }

    static constexpr TrackComputeFunction GetVerticalFunction(const uint16_t type)
    {
        switch (type)
        {
            case TrackElemType::Flat:
            case TrackElemType::EndStation:
            case TrackElemType::BeginStation:
            case TrackElemType::MiddleStation:
            case TrackElemType::Up25:
            case TrackElemType::Up60: //
            case TrackElemType::Down25:
            case TrackElemType::Down60: //
            case TrackElemType::FlatToLeftBank:
            case TrackElemType::FlatToRightBank:
            case TrackElemType::LeftBankToFlat:
            case TrackElemType::RightBankToFlat: //
            case TrackElemType::LeftBank:
            case TrackElemType::RightBank:
            case TrackElemType::TowerBase:
            case TrackElemType::TowerSection:
            case TrackElemType::FlatCovered:
            case TrackElemType::Up25Covered:
            case TrackElemType::Up60Covered:
            case TrackElemType::Down25Covered:
            case TrackElemType::Down60Covered:
            case TrackElemType::Brakes:
            case TrackElemType::RotationControlToggle:
            case TrackElemType::Maze:
            case TrackElemType::Up25LeftBanked:
            case TrackElemType::Up25RightBanked:
            case TrackElemType::Waterfall:
            case TrackElemType::Rapids:
            case TrackElemType::OnRidePhoto:
            case TrackElemType::Down25LeftBanked:
            case TrackElemType::Down25RightBanked:
            case TrackElemType::Whirlpool:
            case TrackElemType::ReverseFreefallVertical:
            case TrackElemType::Up90:
            case TrackElemType::Down90:
            case TrackElemType::DiagFlat:
            case TrackElemType::DiagUp25:
            case TrackElemType::DiagUp60:
            case TrackElemType::DiagDown25:
            case TrackElemType::DiagDown60:
            case TrackElemType::DiagFlatToLeftBank:
            case TrackElemType::DiagFlatToRightBank:
            case TrackElemType::DiagLeftBankToFlat:
            case TrackElemType::DiagRightBankToFlat:
            case TrackElemType::DiagLeftBank:
            case TrackElemType::DiagRightBank:
            case TrackElemType::LogFlumeReverser:
            case TrackElemType::SpinningTunnel:
            case TrackElemType::PoweredLift:
            case TrackElemType::MinigolfHoleA:
            case TrackElemType::MinigolfHoleB:
            case TrackElemType::MinigolfHoleC:
            case TrackElemType::MinigolfHoleD:
            case TrackElemType::MinigolfHoleE:
            case TrackElemType::LeftReverser:
            case TrackElemType::RightReverser:
            case TrackElemType::AirThrustVerticalDown:
            case TrackElemType::BlockBrakes:
            case TrackElemType::Up25ToLeftBankedUp25:
            case TrackElemType::Up25ToRightBankedUp25:
            case TrackElemType::LeftBankedUp25ToUp25:
            case TrackElemType::RightBankedUp25ToUp25:
            case TrackElemType::Down25ToLeftBankedDown25:
            case TrackElemType::Down25ToRightBankedDown25:
            case TrackElemType::LeftBankedDown25ToDown25:
            case TrackElemType::RightBankedDown25ToDown25:
            case TrackElemType::LeftQuarterTurn1TileUp90:
            case TrackElemType::RightQuarterTurn1TileUp90:
            case TrackElemType::LeftQuarterTurn1TileDown90:
            case TrackElemType::RightQuarterTurn1TileDown90:
            case TrackElemType::LeftEighthToDiagUp25:
            case TrackElemType::RightEighthToDiagUp25:
            case TrackElemType::LeftEighthToDiagDown25:
            case TrackElemType::RightEighthToDiagDown25:
            case TrackElemType::LeftEighthToOrthogonalUp25:
            case TrackElemType::RightEighthToOrthogonalUp25:
            case TrackElemType::LeftEighthToOrthogonalDown25:
            case TrackElemType::RightEighthToOrthogonalDown25:
            case TrackElemType::DiagUp25ToLeftBankedUp25:
            case TrackElemType::DiagUp25ToRightBankedUp25:
            case TrackElemType::DiagLeftBankedUp25ToUp25:
            case TrackElemType::DiagRightBankedUp25ToUp25:
            case TrackElemType::DiagDown25ToLeftBankedDown25:
            case TrackElemType::DiagDown25ToRightBankedDown25:
            case TrackElemType::DiagLeftBankedDown25ToDown25:
            case TrackElemType::DiagRightBankedDown25ToDown25:
            case TrackElemType::DiagUp25LeftBanked:
            case TrackElemType::DiagUp25RightBanked:
            case TrackElemType::DiagDown25LeftBanked:
            case TrackElemType::DiagDown25RightBanked:
                return EvaluatorConst<0>;
            case TrackElemType::FlatToUp25:   //
            case TrackElemType::Down25ToFlat: //
            case TrackElemType::LeftBankToUp25:
            case TrackElemType::RightBankToUp25:
            case TrackElemType::Down25ToLeftBank:
            case TrackElemType::Down25ToRightBank:
            case TrackElemType::FlatToUp25Covered:
            case TrackElemType::Down25ToFlatCovered:
            case TrackElemType::LeftBankedFlatToLeftBankedUp25:
            case TrackElemType::RightBankedFlatToRightBankedUp25:
            case TrackElemType::LeftBankedDown25ToLeftBankedFlat:
            case TrackElemType::RightBankedDown25ToRightBankedFlat:
            case TrackElemType::FlatToLeftBankedUp25:
            case TrackElemType::FlatToRightBankedUp25:
            case TrackElemType::LeftBankedDown25ToFlat:
            case TrackElemType::RightBankedDown25ToFlat:
                return EvaluatorConst<103>;
            case TrackElemType::Up25ToFlat:   //
            case TrackElemType::FlatToDown25: //
            case TrackElemType::Up25ToLeftBank:
            case TrackElemType::Up25ToRightBank:
            case TrackElemType::LeftBankToDown25:
            case TrackElemType::RightBankToDown25:
            case TrackElemType::Up25ToFlatCovered:
            case TrackElemType::FlatToDown25Covered:
            case TrackElemType::CableLiftHill:
            case TrackElemType::LeftBankedUp25ToLeftBankedFlat:
            case TrackElemType::RightBankedUp25ToRightBankedFlat:
            case TrackElemType::LeftBankedFlatToLeftBankedDown25:
            case TrackElemType::RightBankedFlatToRightBankedDown25:
            case TrackElemType::LeftBankedUp25ToFlat:
            case TrackElemType::RightBankedUp25ToFlat:
            case TrackElemType::FlatToLeftBankedDown25:
            case TrackElemType::FlatToRightBankedDown25:
                return EvaluatorConst<-103>;
            case TrackElemType::Up25ToUp60:     //
            case TrackElemType::Down60ToDown25: //
            case TrackElemType::Up25ToUp60Covered:
            case TrackElemType::Down60ToDown25Covered:
                return EvaluatorConst<82>;
            case TrackElemType::Up60ToUp25:     //
            case TrackElemType::Down25ToDown60: //
            case TrackElemType::Up60ToUp25Covered:
            case TrackElemType::Down25ToDown60Covered:
                return EvaluatorConst<-82>;
            case TrackElemType::LeftQuarterTurn5Tiles: //
            case TrackElemType::LeftQuarterTurn5TilesUp25:
            case TrackElemType::LeftQuarterTurn5TilesDown25:
            case TrackElemType::LeftTwistDownToUp:
            case TrackElemType::LeftTwistUpToDown:
            case TrackElemType::LeftQuarterTurn5TilesCovered:
            case TrackElemType::LeftQuarterHelixLargeUp:
            case TrackElemType::LeftQuarterHelixLargeDown:
            case TrackElemType::LeftFlyerTwistUp:
            case TrackElemType::LeftFlyerTwistDown:
            case TrackElemType::LeftHeartLineRoll:
                return EvaluatorConst<0>;
            case TrackElemType::RightQuarterTurn5Tiles: //
            case TrackElemType::RightQuarterTurn5TilesUp25:
            case TrackElemType::RightQuarterTurn5TilesDown25:
            case TrackElemType::RightTwistDownToUp:
            case TrackElemType::RightTwistUpToDown:
            case TrackElemType::RightQuarterTurn5TilesCovered:
            case TrackElemType::RightQuarterHelixLargeUp:
            case TrackElemType::RightQuarterHelixLargeDown:
            case TrackElemType::RightFlyerTwistUp:
            case TrackElemType::RightFlyerTwistDown:
            case TrackElemType::RightHeartLineRoll:
                return EvaluatorConst<0>;
            case TrackElemType::BankedLeftQuarterTurn5Tiles:
            case TrackElemType::LeftHalfBankedHelixUpLarge:
            case TrackElemType::LeftHalfBankedHelixDownLarge:
            case TrackElemType::LeftQuarterBankedHelixLargeUp:
            case TrackElemType::LeftQuarterBankedHelixLargeDown:
                return EvaluatorConst<200>;
            case TrackElemType::BankedRightQuarterTurn5Tiles:
            case TrackElemType::RightHalfBankedHelixUpLarge:
            case TrackElemType::RightHalfBankedHelixDownLarge:
            case TrackElemType::RightQuarterBankedHelixLargeUp:
            case TrackElemType::RightQuarterBankedHelixLargeDown:
                return EvaluatorConst<200>;
            case TrackElemType::SBendLeft:
            case TrackElemType::SBendLeftCovered:
                return EvaluatorConst<0>;
            case TrackElemType::SBendRight:
            case TrackElemType::SBendRightCovered:
                return EvaluatorConst<0>;
            case TrackElemType::LeftVerticalLoop:
            case TrackElemType::RightVerticalLoop:
                return EvaluatorVerticalLoop;
            case TrackElemType::LeftQuarterTurn3Tiles:
            case TrackElemType::LeftQuarterTurn3TilesUp25:
            case TrackElemType::LeftQuarterTurn3TilesDown25:
            case TrackElemType::LeftQuarterTurn3TilesCovered:
            case TrackElemType::LeftCurvedLiftHill:
                return EvaluatorConst<0>;
            case TrackElemType::RightQuarterTurn3Tiles:
            case TrackElemType::RightQuarterTurn3TilesUp25:
            case TrackElemType::RightQuarterTurn3TilesDown25:
            case TrackElemType::RightQuarterTurn3TilesCovered:
            case TrackElemType::RightCurvedLiftHill:
                return EvaluatorConst<0>;
            case TrackElemType::LeftBankedQuarterTurn3Tiles:
            case TrackElemType::LeftHalfBankedHelixUpSmall:
            case TrackElemType::LeftHalfBankedHelixDownSmall:
                return EvaluatorConst<100>;
            case TrackElemType::RightBankedQuarterTurn3Tiles:
            case TrackElemType::RightHalfBankedHelixUpSmall:
            case TrackElemType::RightHalfBankedHelixDownSmall:
                return EvaluatorConst<100>;
            case TrackElemType::LeftQuarterTurn1Tile:
                return EvaluatorConst<0>;
            case TrackElemType::RightQuarterTurn1Tile:
                return EvaluatorConst<0>;
            case TrackElemType::HalfLoopUp:
            case TrackElemType::FlyerHalfLoopUninvertedUp:
            case TrackElemType::FlyerHalfLoopInvertedUp:
                return EvaluatorHalfLoopUp;
            case TrackElemType::HalfLoopDown:
            case TrackElemType::FlyerHalfLoopInvertedDown:
            case TrackElemType::FlyerHalfLoopUninvertedDown:
                return EvaluatorHalfLoopDown;
            case TrackElemType::LeftLargeCorkscrewUp:
            case TrackElemType::RightLargeCorkscrewDown:
                return EvaluatorConst<89>;
            case TrackElemType::RightLargeCorkscrewUp:
            case TrackElemType::LeftLargeCorkscrewDown:
                return EvaluatorConst<89>;
            case TrackElemType::LeftCorkscrewUp:
            case TrackElemType::RightCorkscrewDown:
            case TrackElemType::LeftFlyerCorkscrewUp:
            case TrackElemType::RightFlyerCorkscrewDown:
                return EvaluatorConst<52>;
            case TrackElemType::RightCorkscrewUp:
            case TrackElemType::LeftCorkscrewDown:
            case TrackElemType::RightFlyerCorkscrewUp:
            case TrackElemType::LeftFlyerCorkscrewDown:
                return EvaluatorConst<52>;
            case TrackElemType::FlatToUp60:
            case TrackElemType::Down60ToFlat:
                return EvaluatorConst<56>;
            case TrackElemType::Up60ToFlat:
            case TrackElemType::FlatToDown60:
            case TrackElemType::BrakeForDrop:
                return EvaluatorConst<-56>;
            case TrackElemType::LeftQuarterTurn1TileUp60:
            case TrackElemType::LeftQuarterTurn1TileDown60:
                return EvaluatorConst<0>;
            case TrackElemType::RightQuarterTurn1TileUp60:
            case TrackElemType::RightQuarterTurn1TileDown60:
                return EvaluatorConst<0>;
            case TrackElemType::Watersplash:
                return EvaluatorWaterSplash;
            case TrackElemType::FlatToUp60LongBase:
            case TrackElemType::Down60ToFlatLongBase:
                return EvaluatorConst<160>;
            case TrackElemType::Up60ToFlatLongBase:
            case TrackElemType::FlatToDown60LongBase:
                return EvaluatorConst<-160>;
            case TrackElemType::ReverseFreefallSlope:
            case TrackElemType::AirThrustVerticalDownToLevel:
                return EvaluatorConst<120>;
            case TrackElemType::Up60ToUp90:
            case TrackElemType::Down90ToDown60:
                return EvaluatorConst<110>;
            case TrackElemType::Up90ToUp60:
            case TrackElemType::Down60ToDown90:
                return EvaluatorConst<-110>;
            case TrackElemType::LeftEighthToDiag:
            case TrackElemType::LeftEighthToOrthogonal:
                return EvaluatorConst<0>;
            case TrackElemType::RightEighthToDiag:
            case TrackElemType::RightEighthToOrthogonal:
                return EvaluatorConst<0>;
            case TrackElemType::LeftEighthBankToDiag:
            case TrackElemType::LeftEighthBankToOrthogonal:
            case TrackElemType::LeftEighthBankToDiagUp25:
            case TrackElemType::LeftEighthBankToDiagDown25:
            case TrackElemType::LeftEighthBankToOrthogonalUp25:
            case TrackElemType::LeftEighthBankToOrthogonalDown25:
                return EvaluatorConst<270>;
            case TrackElemType::RightEighthBankToDiag:
            case TrackElemType::RightEighthBankToOrthogonal:
            case TrackElemType::RightEighthBankToDiagUp25:
            case TrackElemType::RightEighthBankToDiagDown25:
            case TrackElemType::RightEighthBankToOrthogonalUp25:
            case TrackElemType::RightEighthBankToOrthogonalDown25:
                return EvaluatorConst<270>;
            case TrackElemType::DiagFlatToUp25:
            case TrackElemType::DiagDown25ToFlat:
            case TrackElemType::DiagLeftBankToUp25:
            case TrackElemType::DiagRightBankToUp25:
            case TrackElemType::DiagDown25ToLeftBank:
            case TrackElemType::DiagDown25ToRightBank:
            case TrackElemType::DiagLeftBankedFlatToLeftBankedUp25:
            case TrackElemType::DiagRightBankedFlatToRightBankedUp25:
            case TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat:
            case TrackElemType::DiagRightBankedDown25ToRightBankedFlat:
            case TrackElemType::DiagFlatToLeftBankedUp25:
            case TrackElemType::DiagFlatToRightBankedUp25:
            case TrackElemType::DiagLeftBankedDown25ToFlat:
            case TrackElemType::DiagRightBankedDown25ToFlat:
                return EvaluatorConst<113>;
            case TrackElemType::DiagUp25ToFlat:
            case TrackElemType::DiagFlatToDown25:
            case TrackElemType::DiagUp25ToLeftBank:
            case TrackElemType::DiagUp25ToRightBank:
            case TrackElemType::DiagLeftBankToDown25:
            case TrackElemType::DiagRightBankToDown25:
            case TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat:
            case TrackElemType::DiagRightBankedUp25ToRightBankedFlat:
            case TrackElemType::DiagLeftBankedFlatToLeftBankedDown25:
            case TrackElemType::DiagRightBankedFlatToRightBankedDown25:
            case TrackElemType::DiagLeftBankedUp25ToFlat:
            case TrackElemType::DiagRightBankedUp25ToFlat:
            case TrackElemType::DiagFlatToLeftBankedDown25:
            case TrackElemType::DiagFlatToRightBankedDown25:
                return EvaluatorConst<-113>;
            case TrackElemType::DiagUp25ToUp60:
            case TrackElemType::DiagDown60ToDown25:
                return EvaluatorConst<95>;
            case TrackElemType::DiagUp60ToUp25:
            case TrackElemType::DiagDown25ToDown60:
                return EvaluatorConst<-95>;
            case TrackElemType::DiagFlatToUp60:
            case TrackElemType::DiagDown60ToFlat:
                return EvaluatorConst<60>;
            case TrackElemType::DiagUp60ToFlat:
            case TrackElemType::DiagFlatToDown60:
                return EvaluatorConst<-60>;
            case TrackElemType::LeftBarrelRollUpToDown:
            case TrackElemType::LeftBarrelRollDownToUp:
                return EvaluatorConst<170>;
            case TrackElemType::RightBarrelRollUpToDown:
            case TrackElemType::RightBarrelRollDownToUp:
                return EvaluatorConst<170>;
            case TrackElemType::LeftZeroGRollUp:
            case TrackElemType::RightZeroGRollUp:
                return EvaluatorConst<250>;
            case TrackElemType::LeftZeroGRollDown:
            case TrackElemType::RightZeroGRollDown:
                return EvaluatorConst<250>;
            case TrackElemType::LeftLargeZeroGRollUp:
            case TrackElemType::RightLargeZeroGRollUp:
                return EvaluatorLargeZeroGRollUp;
            case TrackElemType::LeftLargeZeroGRollDown:
            case TrackElemType::RightLargeZeroGRollDown:
                return EvaluatorLargeZeroGRollDown;
            case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25:
            case TrackElemType::RightBankToRightQuarterTurn3TilesUp25:
            case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank:
            case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank:
                return EvaluatorQuarterTurn3Tiles;
            case TrackElemType::LeftMediumHalfLoopUp:
            case TrackElemType::RightMediumHalfLoopUp:
                return EvaluatorMediumHalfLoopUp;
            case TrackElemType::RightMediumHalfLoopDown:
            case TrackElemType::LeftMediumHalfLoopDown:
                return EvaluatorMediumHalfLoopDown;
            case TrackElemType::LeftLargeHalfLoopUp:
            case TrackElemType::RightLargeHalfLoopUp:
            case TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp:
            case TrackElemType::RightFlyerLargeHalfLoopUninvertedUp:
            case TrackElemType::LeftFlyerLargeHalfLoopInvertedUp:
            case TrackElemType::RightFlyerLargeHalfLoopInvertedUp:
                return EvaluatorLargeHalfLoopUp;
            case TrackElemType::LeftLargeHalfLoopDown:
            case TrackElemType::RightLargeHalfLoopDown:
            case TrackElemType::LeftFlyerLargeHalfLoopInvertedDown:
            case TrackElemType::RightFlyerLargeHalfLoopInvertedDown:
            case TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown:
            case TrackElemType::RightFlyerLargeHalfLoopUninvertedDown:
                return EvaluatorLargeHalfLoopDown;
            case TrackElemType::HeartLineTransferUp:
                return EvaluatorHeartLineTransferUp;
            case TrackElemType::HeartLineTransferDown:
                return EvaluatorHeartLineTransferDown;
            case TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop:
            case TrackElemType::InvertedFlatToDown90QuarterLoop:
            case TrackElemType::MultiDimFlatToDown90QuarterLoop:
                return EvaluatorDown90QuarterLoop;
            case TrackElemType::Up90ToInvertedFlatQuarterLoop:
            case TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop:
            case TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop:
                return EvaluatorUp90QuarterLoop;
            case TrackElemType::AirThrustTopCap:
                return EvaluatorConst<-60>;
            case TrackElemType::LeftBankedQuarterTurn3TileUp25:
            case TrackElemType::LeftBankedQuarterTurn3TileDown25:
                return EvaluatorConst<200>;
            case TrackElemType::RightBankedQuarterTurn3TileUp25:
            case TrackElemType::RightBankedQuarterTurn3TileDown25:
                return EvaluatorConst<200>;
            case TrackElemType::LeftBankedQuarterTurn5TileUp25:
            case TrackElemType::LeftBankedQuarterTurn5TileDown25:
                return EvaluatorConst<200>;
            case TrackElemType::RightBankedQuarterTurn5TileUp25:
            case TrackElemType::RightBankedQuarterTurn5TileDown25:
                return EvaluatorConst<200>;
            default:
                return EvaluatorConst<0>;
        }
    }

    static constexpr StringId RideConfigurationStringIds[] = {
        STR_EMPTY,                         // 0
        STR_STATION_PLATFORM,              // 1
        STR_EMPTY,                         // 2
        STR_EMPTY,                         // 3
        STR_EMPTY,                         // 4
        STR_EMPTY,                         // 5
        STR_EMPTY,                         // 6
        STR_EMPTY,                         // 7
        STR_EMPTY,                         // 8
        STR_EMPTY,                         // 9
        STR_EMPTY,                         // 10
        STR_EMPTY,                         // 11
        STR_EMPTY,                         // 12
        STR_EMPTY,                         // 13
        STR_EMPTY,                         // 14
        STR_EMPTY,                         // 15
        STR_EMPTY,                         // 16
        STR_EMPTY,                         // 17
        STR_EMPTY,                         // 18
        STR_EMPTY,                         // 19
        STR_EMPTY,                         // 20
        STR_EMPTY,                         // 21
        STR_EMPTY,                         // 22
        STR_EMPTY,                         // 23
        STR_EMPTY,                         // 24
        STR_EMPTY,                         // 25
        STR_EMPTY,                         // 26
        STR_EMPTY,                         // 27
        STR_EMPTY,                         // 28
        STR_EMPTY,                         // 29
        STR_EMPTY,                         // 30
        STR_EMPTY,                         // 31
        STR_EMPTY,                         // 32
        STR_EMPTY,                         // 33
        STR_EMPTY,                         // 34
        STR_EMPTY,                         // 35
        STR_EMPTY,                         // 36
        STR_EMPTY,                         // 37
        STR_S_BEND_LEFT,                   // 38
        STR_S_BEND_RIGHT,                  // 39
        STR_VERTICAL_LOOP_LEFT,            // 40
        STR_VERTICAL_LOOP_RIGHT,           // 41
        STR_EMPTY,                         // 42
        STR_EMPTY,                         // 43
        STR_EMPTY,                         // 44
        STR_EMPTY,                         // 45
        STR_EMPTY,                         // 46
        STR_EMPTY,                         // 47
        STR_EMPTY,                         // 48
        STR_EMPTY,                         // 49
        STR_EMPTY,                         // 50
        STR_EMPTY,                         // 51
        STR_IN_LINE_TWIST_LEFT,            // 52
        STR_IN_LINE_TWIST_RIGHT,           // 53
        STR_IN_LINE_TWIST_LEFT,            // 54
        STR_IN_LINE_TWIST_RIGHT,           // 55
        STR_HALF_LOOP,                     // 56
        STR_HALF_LOOP,                     // 57
        STR_HALF_CORKSCREW_LEFT,           // 58
        STR_HALF_CORKSCREW_RIGHT,          // 59
        STR_HALF_CORKSCREW_LEFT,           // 60
        STR_HALF_CORKSCREW_RIGHT,          // 61
        STR_EMPTY,                         // 62
        STR_EMPTY,                         // 63
        STR_EMPTY,                         // 64
        STR_EMPTY,                         // 65
        STR_ENTRY_EXIT_PLATFORM,           // 66
        STR_VERTICAL_TOWER,                // 67
        STR_EMPTY,                         // 68
        STR_EMPTY,                         // 69
        STR_EMPTY,                         // 70
        STR_EMPTY,                         // 71
        STR_EMPTY,                         // 72
        STR_EMPTY,                         // 73
        STR_EMPTY,                         // 74
        STR_EMPTY,                         // 75
        STR_EMPTY,                         // 76
        STR_EMPTY,                         // 77
        STR_EMPTY,                         // 78
        STR_EMPTY,                         // 79
        STR_EMPTY,                         // 80
        STR_EMPTY,                         // 81
        STR_EMPTY,                         // 82
        STR_S_BEND_LEFT,                   // 83
        STR_S_BEND_RIGHT,                  // 84
        STR_EMPTY,                         // 85
        STR_EMPTY,                         // 86
        STR_HELIX_UP_SMALL,                // 87
        STR_HELIX_UP_SMALL,                // 88
        STR_HELIX_DOWN_SMALL,              // 89
        STR_HELIX_DOWN_SMALL,              // 90
        STR_HELIX_UP_LARGE,                // 91
        STR_HELIX_UP_LARGE,                // 92
        STR_HELIX_DOWN_LARGE,              // 93
        STR_HELIX_DOWN_LARGE,              // 94
        STR_EMPTY,                         // 95
        STR_EMPTY,                         // 96
        STR_EMPTY,                         // 97
        STR_EMPTY,                         // 98
        STR_BRAKES,                        // 99
        STR_BOOSTER,                       // 100
        STR_EMPTY,                         // 101
        STR_HELIX_UP_LARGE,                // 102
        STR_HELIX_UP_LARGE,                // 103
        STR_HELIX_DOWN_LARGE,              // 104
        STR_HELIX_DOWN_LARGE,              // 105
        STR_HELIX_UP_LEFT,                 // 106
        STR_HELIX_UP_RIGHT,                // 107
        STR_HELIX_DOWN_LEFT,               // 108
        STR_HELIX_DOWN_RIGHT,              // 109
        STR_EMPTY,                         // TrackElemType::Up25LeftBanked
        STR_EMPTY,                         // TrackElemType::Up25RighBanked
        STR_WATERFALLS,                    // 112
        STR_RAPIDS,                        // 113
        STR_ON_RIDE_PHOTO_SECTION,         // 114
        STR_EMPTY,                         // TrackElemType::Down25LeftBanked
        STR_EMPTY,                         // TrackElemType::Down25RightBanked
        STR_WATER_SPLASH,                  // 117
        STR_EMPTY,                         // 118
        STR_EMPTY,                         // 119
        STR_WHIRLPOOL,                     // 120
        STR_EMPTY,                         // 121
        STR_EMPTY,                         // 122
        STR_CABLE_LIFT_HILL,               // 123
        STR_SLOPE_UP_TO_VERTICAL,          // 124
        STR_VERTICAL_TRACK,                // 125
        STR_EMPTY,                         // 126
        STR_EMPTY,                         // 127
        STR_EMPTY,                         // 128
        STR_EMPTY,                         // 129
        STR_EMPTY,                         // 130
        STR_EMPTY,                         // 131
        STR_HOLDING_BRAKE_FOR_DROP,        // 132
        STR_EMPTY,                         // 133
        STR_EMPTY,                         // 134
        STR_EMPTY,                         // 135
        STR_EMPTY,                         // 136
        STR_EMPTY,                         // 137
        STR_EMPTY,                         // 138
        STR_EMPTY,                         // 139
        STR_EMPTY,                         // 140
        STR_EMPTY,                         // 141
        STR_EMPTY,                         // 142
        STR_EMPTY,                         // 143
        STR_EMPTY,                         // 144
        STR_EMPTY,                         // 145
        STR_EMPTY,                         // 146
        STR_EMPTY,                         // 147
        STR_EMPTY,                         // 148
        STR_EMPTY,                         // 149
        STR_EMPTY,                         // 150
        STR_EMPTY,                         // 151
        STR_EMPTY,                         // 152
        STR_EMPTY,                         // 153
        STR_EMPTY,                         // 154
        STR_EMPTY,                         // 155
        STR_EMPTY,                         // 156
        STR_EMPTY,                         // 157
        STR_EMPTY,                         // 158
        STR_EMPTY,                         // 159
        STR_EMPTY,                         // 160
        STR_EMPTY,                         // 161
        STR_EMPTY,                         // 162
        STR_EMPTY,                         // 163
        STR_EMPTY,                         // 164
        STR_EMPTY,                         // 165
        STR_EMPTY,                         // 166
        STR_EMPTY,                         // 167
        STR_EMPTY,                         // 168
        STR_EMPTY,                         // 169
        STR_EMPTY,                         // 170
        STR_EMPTY,                         // 171
        STR_REVERSER_TURNTABLE,            // 172
        STR_SPINNING_TUNNEL,               // 173
        STR_BARREL_ROLL_LEFT,              // 174
        STR_BARREL_ROLL_RIGHT,             // 175
        STR_BARREL_ROLL_LEFT,              // 176
        STR_BARREL_ROLL_RIGHT,             // 177
        STR_EMPTY,                         // 178
        STR_EMPTY,                         // 179
        STR_EMPTY,                         // 180
        STR_EMPTY,                         // 181
        STR_LAUNCHED_LIFT_HILL,            // 182
        STR_LARGE_HALF_LOOP_LEFT,          // 183
        STR_LARGE_HALF_LOOP_RIGHT,         // 184
        STR_LARGE_HALF_LOOP_LEFT,          // 185
        STR_LARGE_HALF_LOOP_RIGHT,         // 186
        STR_IN_LINE_TWIST_LEFT,            // 187
        STR_IN_LINE_TWIST_RIGHT,           // 188
        STR_IN_LINE_TWIST_LEFT,            // 189
        STR_IN_LINE_TWIST_RIGHT,           // 190
        STR_HALF_LOOP,                     // 191
        STR_HALF_LOOP,                     // 192
        STR_HALF_CORKSCREW_LEFT,           // 193
        STR_HALF_CORKSCREW_RIGHT,          // 194
        STR_HALF_CORKSCREW_LEFT,           // 195
        STR_HALF_CORKSCREW_RIGHT,          // 196
        STR_UPPER_TRANSFER,                // 197
        STR_LOWER_TRANSFER,                // 198
        STR_HEARTLINE_ROLL_LEFT,           // 199
        STR_HEARTLINE_ROLL_RIGHT,          // 200
        STR_GOLF_HOLE_A,                   // 201
        STR_GOLF_HOLE_B,                   // 202
        STR_GOLF_HOLE_C,                   // 203
        STR_GOLF_HOLE_D,                   // 204
        STR_GOLF_HOLE_E,                   // 205
        STR_QUARTER_LOOP,                  // 206
        STR_QUARTER_LOOP,                  // 207
        STR_QUARTER_LOOP,                  // 208
        STR_CURVED_LIFT_HILL_LEFT,         // 209
        STR_CURVED_LIFT_HILL_RIGHT,        // 210
        STR_REVERSER_LEFT,                 // 211
        STR_REVERSER_RIGHT,                // 212
        STR_TOP_SECTION,                   // 213
        STR_VERTICAL_TRACK,                // 214
        STR_SLOPE_TO_LEVEL,                // 215
        STR_BLOCK_BRAKES,                  // 216
        STR_EMPTY,                         // 217
        STR_EMPTY,                         // 218
        STR_EMPTY,                         // 219
        STR_EMPTY,                         // 220
        STR_EMPTY,                         // 221
        STR_EMPTY,                         // 222
        STR_EMPTY,                         // 223
        STR_EMPTY,                         // 224
        STR_EMPTY,                         // 225
        STR_EMPTY,                         // 226
        STR_EMPTY,                         // 227
        STR_EMPTY,                         // 228
        STR_EMPTY,                         // 229
        STR_EMPTY,                         // 230
        STR_EMPTY,                         // 231
        STR_EMPTY,                         // 232
        STR_EMPTY,                         // 233
        STR_EMPTY,                         // 234
        STR_EMPTY,                         // 235
        STR_EMPTY,                         // 236
        STR_EMPTY,                         // 237
        STR_EMPTY,                         // 238
        STR_EMPTY,                         // 239
        STR_EMPTY,                         // 240
        STR_EMPTY,                         // 241
        STR_EMPTY,                         // 242
        STR_EMPTY,                         // 243
        STR_EMPTY,                         // 244
        STR_EMPTY,                         // 245
        STR_EMPTY,                         // 246
        STR_EMPTY,                         // 247
        STR_EMPTY,                         // 248
        STR_EMPTY,                         // 249
        STR_EMPTY,                         // 250
        STR_EMPTY,                         // 251
        STR_EMPTY,                         // 252
        STR_QUARTER_LOOP,                  // 253
        STR_QUARTER_LOOP,                  // 254
        STR_QUARTER_LOOP,                  // 255
        STR_SPINNING_CONTROL_TOGGLE_TRACK, // 256
        STR_EMPTY,                         // TrackElemType::FlatTrack1x4A
        STR_BASE_SIZE_2_X_2,               // TrackElemType::FlatTrack2x2
        STR_BASE_SIZE_4_X_4,               // TrackElemType::FlatTrack4x4
        STR_BASE_SIZE_2_X_4,               // TrackElemType::FlatTrack2x4
        STR_BASE_SIZE_5_X_1,               // TrackElemType::FlatTrack1x5
        STR_EMPTY,                         // TrackElemType::FlatTrack1x1A
        STR_EMPTY,                         // TrackElemType::FlatTrack1x4B
        STR_EMPTY,                         // TrackElemType::FlatTrack1x1B
        STR_EMPTY,                         // TrackElemType::FlatTrack1x4C
        STR_EMPTY,                         // TrackElemType::FlatTrack3x3
        STR_LARGE_HALF_CORKSCREW_LEFT,     // TrackElemType::LeftCorkscrewUp
        STR_LARGE_HALF_CORKSCREW_RIGHT,    // TrackElemType::RightCorkscrewUp
        STR_LARGE_HALF_CORKSCREW_LEFT,     // TrackElemType::LeftCorkscrewDown
        STR_LARGE_HALF_CORKSCREW_RIGHT,    // TrackElemType::RightCorkscrewDown
        STR_MEDIUM_HALF_LOOP_LEFT,         // TrackElemType::LeftMediumHalfLoopUp
        STR_MEDIUM_HALF_LOOP_RIGHT,        // TrackElemType::RightMediumHalfLoopUp
        STR_MEDIUM_HALF_LOOP_LEFT,         // TrackElemType::LeftMediumHalfLoopDown
        STR_MEDIUM_HALF_LOOP_RIGHT,        // TrackElemType::RightMediumHalfLoopDown
        STR_ZERO_G_ROLL_LEFT,              // TrackElemType::LeftZeroGRollUp
        STR_ZERO_G_ROLL_RIGHT,             // TrackElemType::RightZeroGRollUp
        STR_ZERO_G_ROLL_LEFT,              // TrackElemType::LeftZeroGRollDown
        STR_ZERO_G_ROLL_RIGHT,             // TrackElemType::RightZeroGRollDown
        STR_LARGE_ZERO_G_ROLL_LEFT,        // TrackElemType::LeftLargeZeroGRollUp
        STR_LARGE_ZERO_G_ROLL_RIGHT,       // TrackElemType::RightLargeZeroGRollUp
        STR_LARGE_ZERO_G_ROLL_LEFT,        // TrackElemType::LeftLargeZeroGRollDown
        STR_LARGE_ZERO_G_ROLL_RIGHT,       // TrackElemType::RightLargeZeroGRollDown
        STR_LARGE_HALF_LOOP_LEFT,          // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp
        STR_LARGE_HALF_LOOP_RIGHT,         // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp
        STR_LARGE_HALF_LOOP_LEFT,          // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown
        STR_LARGE_HALF_LOOP_RIGHT,         // TrackElemType::RightFlyerLargeHalfLoopInvertedDown
        STR_LARGE_HALF_LOOP_LEFT,          // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp
        STR_LARGE_HALF_LOOP_RIGHT,         // TrackElemType::RightFlyerLargeHalfLoopInvertedUp
        STR_LARGE_HALF_LOOP_LEFT,          // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown
        STR_LARGE_HALF_LOOP_RIGHT,         // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown
        STR_HALF_LOOP,                     // TrackElemType::FlyerHalfLoopInvertedUp
        STR_HALF_LOOP,                     // TrackElemType::FlyerHalfLoopUninvertedDown
        STR_EMPTY,                         // TrackElemType::LeftEighthToDiagUp25
        STR_EMPTY,                         // TrackElemType::RightEighthToDiagUp25
        STR_EMPTY,                         // TrackElemType::LeftEighthToDiagDown25
        STR_EMPTY,                         // TrackElemType::RightEighthToDiagDown25
        STR_EMPTY,                         // TrackElemType::LeftEighthToOrthogonalUp25
        STR_EMPTY,                         // TrackElemType::RightEighthToOrthogonalUp25
        STR_EMPTY,                         // TrackElemType::LeftEighthToOrthogonalDown25
        STR_EMPTY,                         // TrackElemType::RightEighthToOrthogonalDown25
        STR_EMPTY,                         // TrackElemType::DiagUp25ToLeftBankedUp25
        STR_EMPTY,                         // TrackElemType::DiagUp25ToRightBankedUp25
        STR_EMPTY,                         // TrackElemType::DiagLeftBankedUp25ToUp25
        STR_EMPTY,                         // TrackElemType::DiagRightBankedUp25ToUp25
        STR_EMPTY,                         // TrackElemType::DiagDown25ToLeftBankedDown25
        STR_EMPTY,                         // TrackElemType::DiagDown25ToRightBankedDown25
        STR_EMPTY,                         // TrackElemType::DiagLeftBankedDown25ToDown25
        STR_EMPTY,                         // TrackElemType::DiagRightBankedDown25ToDown25
        STR_EMPTY,                         // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25
        STR_EMPTY,                         // TrackElemType::DiagRightBankedFlatToRightBankedUp25
        STR_EMPTY,                         // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat
        STR_EMPTY,                         // TrackElemType::DiagRightBankedUp25ToRightBankedFlat
        STR_EMPTY,                         // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25
        STR_EMPTY,                         // TrackElemType::DiagRightBankedFlatToRightBankedDown25
        STR_EMPTY,                         // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat
        STR_EMPTY,                         // TrackElemType::DiagRightBankedDown25ToRightBankedFlat
        STR_EMPTY,                         // TrackElemType::DiagFlatToLeftBankedUp25
        STR_EMPTY,                         // TrackElemType::DiagFlatToRightBankedUp25
        STR_EMPTY,                         // TrackElemType::DiagLeftBankedUp25ToFlat
        STR_EMPTY,                         // TrackElemType::DiagRightBankedUp25ToFlat
        STR_EMPTY,                         // TrackElemType::DiagFlatToLeftBankedDown25
        STR_EMPTY,                         // TrackElemType::DiagFlatToRightBankedDown25
        STR_EMPTY,                         // TrackElemType::DiagLeftBankedDown25ToFlat
        STR_EMPTY,                         // TrackElemType::DiagRightBankedDown25ToFlat
        STR_EMPTY,                         // TrackElemType::Up25LeftBanked
        STR_EMPTY,                         // TrackElemType::Up25RightBanked
        STR_EMPTY,                         // TrackElemType::Down25LeftBanked
        STR_EMPTY,                         // TrackElemType::Down25RightBanked
        STR_EMPTY,                         // TrackElemType::LeftEighthBankToDiagUp25
        STR_EMPTY,                         // TrackElemType::RightEighthBankToDiagUp25
        STR_EMPTY,                         // TrackElemType::LeftEighthBankToDiagDown25
        STR_EMPTY,                         // TrackElemType::RightEighthBankToDiagDown25
        STR_EMPTY,                         // TrackElemType::LeftEighthBankToOrthogonalUp25
        STR_EMPTY,                         // TrackElemType::RightEighthBankToOrthogonalUp25
        STR_EMPTY,                         // TrackElemType::LeftEighthBankToOrthogonalDown25
        STR_EMPTY,                         // TrackElemType::RightEighthBankToOrthogonalDown25
        STR_BRAKES,                        // TrackElemType::DiagBrakes
        STR_BLOCK_BRAKES                   // TrackElemType::DiagBlockBrakes
    };
    static_assert(std::size(RideConfigurationStringIds) == TrackElemType::Count);

    static constexpr auto BuildDescriptorTable()
    {
        std::array<TrackElementDescriptor, TrackElemType::Count> res{};

        for (int i = 0; i < TrackElemType::Count; i++)
        {
            TrackElementDescriptor& desc = res[i];
            desc.description = RideConfigurationStringIds[i];
            desc.alternativeType = AlternativeTrackTypes[i];
            desc.block = const_cast<PreviewTrack*>(TrackBlocks[i]);
            desc.coordinates = _trackCoordinates[i];
            desc.curveChain = gTrackCurveChain[i];
            desc.flags = TrackFlags[i];
            desc.heightMarkerPositions = TrackHeightMarkerPositions[i];
            desc.mirrorElement = TrackElementMirrorMap[i];
            desc.pieceLength = TrackPieceLengths[i];
            desc.priceModifier = TrackPricing[i];
            desc.definition = TrackDefinitions[i];
            desc.spinFunction = TrackTypeToSpinFunction[i];
            desc.verticalFactor = GetVerticalFunction(i);
            desc.lateralFactor = GetLateralFunction(i);

            for (uint8_t j = 0; j < kMaxSequencesPerPiece; j++)
            {
                desc.sequenceElementAllowedWallEdges[j] = TrackSequenceElementAllowedWallEdges[i][j];
                desc.sequenceProperties[j] = TrackSequenceProperties[i][j];
                desc.sequenceWoodenSupports[j] = kTrackSequenceWoodenSupports[i][j];
            }
        }

        return res;
    }

    static constexpr auto _trackElementDescriptors = BuildDescriptorTable();

    const TrackElementDescriptor& GetTrackElementDescriptor(const uint32_t type)
    {
        if (type >= _trackElementDescriptors.size())
            return _trackElementDescriptors[0];
        return _trackElementDescriptors[type];
    }

    const PreviewTrack* TrackElementDescriptor::GetBlockForSequence(uint8_t sequenceIndex) const
    {
        const auto* trackBlock = block;
        if (trackBlock == nullptr)
            return nullptr;

        // The sequence index may be higher than the amount of sequences actually present.
        // We don’t know the amount of sequences present in the block upfront, but there is an end marker consisting of all
        // 255s.
        for (auto i = 0; i < sequenceIndex; i++)
        {
            trackBlock++;

            if (trackBlock == nullptr || trackBlock->index == 255)
                return nullptr;
        }

        return trackBlock;
    }
} // namespace OpenRCT2::TrackMetaData
